Subversion Repositories Kolibri OS

Rev

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

  1. /*
  2.  * Musepack SV8 decoder
  3.  * Copyright (c) 2007 Konstantin Shishkov
  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. #ifndef AVCODEC_MPC8HUFF_H
  23. #define AVCODEC_MPC8HUFF_H
  24.  
  25. #include <stdint.h>
  26.  
  27. #define MPC8_BANDS_SIZE 33
  28. #define MPC8_BANDS_BITS 9
  29.  
  30. static const uint8_t mpc8_bands_codes[MPC8_BANDS_SIZE] = {
  31.  0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04,
  32.  0x05, 0x06, 0x01, 0x02, 0x03, 0x00, 0x04, 0x05,
  33.  0x06, 0x07, 0x08, 0x01, 0x09, 0x0A, 0x0B, 0x07,
  34.  0x08, 0x09, 0x06, 0x07, 0x05, 0x05, 0x03, 0x03,
  35.  0x01,
  36. };
  37. static const int8_t mpc8_bands_bits[MPC8_BANDS_SIZE] = {
  38.   1,  3,  5,  6,  7,  8,  8,  9,
  39.  10, 11, 12, 12, 12, 13, 12, 12,
  40.  12, 12, 12, 13, 12, 12, 12, 11,
  41.  11, 11, 10, 10,  9,  8,  6,  5,
  42.   2,
  43. };
  44.  
  45. #define MPC8_SCFI0_SIZE 4
  46. #define MPC8_SCFI0_BITS 3
  47.  
  48. static const uint8_t mpc8_scfi0_codes[MPC8_SCFI0_SIZE] = {
  49.  0x00, 0x01, 0x01, 0x01,
  50. };
  51. static const int8_t mpc8_scfi0_bits[MPC8_SCFI0_SIZE] = {
  52.   3,  3,  1,  2,
  53. };
  54.  
  55. #define MPC8_SCFI1_SIZE 16
  56. #define MPC8_SCFI1_BITS 7
  57.  
  58. static const uint8_t mpc8_scfi1_codes[MPC8_SCFI1_SIZE] = {
  59.  0x01, 0x00, 0x02, 0x03, 0x01, 0x03, 0x04, 0x05,
  60.  0x04, 0x06, 0x02, 0x02, 0x05, 0x07, 0x03, 0x03,
  61.  
  62. };
  63. static const int8_t mpc8_scfi1_bits[MPC8_SCFI1_SIZE] = {
  64.   6,  7,  6,  6,  7,  5,  5,  5,
  65.   6,  5,  2,  3,  6,  5,  3,  2,
  66.  
  67. };
  68.  
  69. #define MPC8_DSCF0_SIZE 64
  70. #define MPC8_DSCF0_BITS 9
  71.  
  72. static const uint8_t mpc8_dscf0_codes[MPC8_DSCF0_SIZE] = {
  73.  0x03, 0x04, 0x05, 0x04, 0x05, 0x06, 0x05, 0x06,
  74.  0x07, 0x08, 0x09, 0x07, 0x08, 0x09, 0x0A, 0x07,
  75.  0x08, 0x09, 0x0A, 0x07, 0x08, 0x09, 0x0A, 0x06,
  76.  0x07, 0x05, 0x04, 0x05, 0x06, 0x06, 0x07, 0x0A,
  77.  0x08, 0x05, 0x06, 0x07, 0x09, 0x07, 0x08, 0x09,
  78.  0x0B, 0x0B, 0x0C, 0x0D, 0x0B, 0x0C, 0x0D, 0x0B,
  79.  0x0C, 0x0D, 0x07, 0x08, 0x09, 0x06, 0x07, 0x03,
  80.  0x04, 0x05, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
  81. };
  82. static const int8_t mpc8_dscf0_bits[MPC8_DSCF0_SIZE] = {
  83.  12, 12, 12, 11, 11, 11, 10, 10,
  84.  10, 10, 10,  9,  9,  9,  9,  8,
  85.   8,  8,  8,  7,  7,  7,  7,  6,
  86.   6,  5,  4,  4,  5,  4,  4, 10,
  87.   4,  3,  3,  3,  4,  5,  6,  6,
  88.   7,  8,  8,  8,  9,  9,  9, 10,
  89.  10, 10, 11, 11, 11, 12, 12, 13,
  90.  13, 13, 14, 14, 14, 14, 14, 14,
  91.  
  92. };
  93.  
  94. #define MPC8_DSCF1_SIZE 65
  95. #define MPC8_DSCF1_BITS 9
  96.  
  97. static const uint8_t mpc8_dscf1_codes[MPC8_DSCF1_SIZE] = {
  98.  0x00, 0x03, 0x04, 0x04, 0x05, 0x06, 0x05, 0x06,
  99.  0x07, 0x08, 0x07, 0x08, 0x09, 0x0A, 0x07, 0x08,
  100.  0x09, 0x0A, 0x07, 0x08, 0x09, 0x06, 0x07, 0x05,
  101.  0x06, 0x04, 0x03, 0x03, 0x04, 0x03, 0x04, 0x05,
  102.  0x06, 0x07, 0x05, 0x04, 0x05, 0x05, 0x07, 0x08,
  103.  0x09, 0x0A, 0x0B, 0x0B, 0x0C, 0x0D, 0x0B, 0x0C,
  104.  0x0D, 0x09, 0x0A, 0x0B, 0x0C, 0x07, 0x08, 0x09,
  105.  0x05, 0x06, 0x07, 0x01, 0x02, 0x03, 0x04, 0x05,
  106.  0x0D,
  107. };
  108. static const int8_t mpc8_dscf1_bits[MPC8_DSCF1_SIZE] = {
  109.  15, 14, 14, 13, 13, 13, 12, 12,
  110.  12, 12, 11, 11, 11, 11, 10, 10,
  111.  10, 10,  9,  9,  9,  8,  8,  7,
  112.   7,  6,  5,  4,  4,  3,  3,  3,
  113.   3,  3,  4,  5,  5,  6,  7,  8,
  114.   8,  9,  9, 10, 10, 10, 11, 11,
  115.  11, 12, 12, 12, 12, 13, 13, 13,
  116.  14, 14, 14, 15, 15, 15, 15, 15,
  117.  12,
  118. };
  119.  
  120. #define MPC8_RES_SIZE 17
  121. #define MPC8_RES_BITS 9
  122.  
  123. static const uint8_t mpc8_res_codes[2][MPC8_RES_SIZE] = {
  124.   {
  125.     0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  126.     0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01,
  127.     0x01,
  128.   },
  129.   {
  130.     0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  131.     0x00, 0x01, 0x02, 0x03, 0x01, 0x01, 0x01, 0x01,
  132.     0x03,
  133.   }
  134. };
  135. static const int8_t mpc8_res_bits[2][MPC8_RES_SIZE] = {
  136.   {
  137.      1,  2,  4,  5,  6,  7,  9, 10,
  138.     11, 12, 13, 14, 15, 16, 16,  8,
  139.      3,
  140.   },
  141.   {
  142.      2,  2,  3,  5,  7,  8, 10, 12,
  143.     14, 14, 14, 14, 11,  9,  6,  4,
  144.      2,
  145.   }
  146. };
  147.  
  148. #define MPC8_Q1_SIZE 19
  149. #define MPC8_Q1_BITS 9
  150.  
  151. static const uint8_t mpc8_q1_codes[MPC8_Q1_SIZE] = {
  152.  0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
  153.  0x03, 0x04, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01,
  154.  0x01, 0x00, 0x01,
  155. };
  156. static const int8_t mpc8_q1_bits[MPC8_Q1_SIZE] = {
  157.   6,  4,  4,  3,  3,  3,  3,  3,
  158.   4,  4,  4,  5,  7,  8,  9, 10,
  159.  11, 12, 12,
  160. };
  161.  
  162. #define MPC8_Q9UP_SIZE 256
  163. #define MPC8_Q9UP_BITS 9
  164.  
  165. static const uint8_t mpc8_q9up_codes[MPC8_Q9UP_SIZE] = {
  166.  0x01, 0x02, 0x03, 0x04, 0x05, 0x05, 0x06, 0x07,
  167.  0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
  168.  0x10, 0x11, 0x12, 0x26, 0x27, 0x13, 0x14, 0x15,
  169.  0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,
  170.  0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,
  171.  0x28, 0x26, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E,
  172.  0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,
  173.  0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E,
  174.  0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,
  175.  0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E,
  176.  0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56,
  177.  0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E,
  178.  0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
  179.  0x67, 0x68, 0x69, 0x6A, 0x56, 0x57, 0x58, 0x59,
  180.  0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61,
  181.  0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x3E,
  182.  0x3F, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
  183.  0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
  184.  0x78, 0x79, 0x7A, 0x6B, 0x7B, 0x6C, 0x6D, 0x6E,
  185.  0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76,
  186.  0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E,
  187.  0x7F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86,
  188.  0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E,
  189.  0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
  190.  0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E,
  191.  0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,
  192.  0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0x27, 0x28, 0x29,
  193.  0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31,
  194.  0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
  195.  0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41,
  196.  0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
  197.  0x4A, 0x4B, 0x06, 0x07, 0x08, 0x09, 0x00, 0x01,
  198. };
  199. static const int8_t mpc8_q9up_bits[MPC8_Q9UP_SIZE] = {
  200.  10, 10, 10, 10, 10,  9,  9,  9,
  201.   9,  9,  9,  9,  9,  9,  9,  9,
  202.   9,  9,  9,  8,  8,  9,  9,  9,
  203.   9,  9,  9,  9,  9,  9,  9,  9,
  204.   9,  9,  9,  9,  9,  9,  9,  9,
  205.   8,  9,  8,  8,  8,  8,  8,  8,
  206.   8,  8,  8,  8,  8,  8,  8,  8,
  207.   8,  8,  8,  8,  8,  8,  8,  8,
  208.   8,  8,  8,  8,  8,  8,  8,  8,
  209.   8,  8,  8,  8,  8,  8,  8,  8,
  210.   8,  8,  8,  8,  8,  8,  8,  8,
  211.   8,  8,  8,  8,  8,  8,  8,  8,
  212.   8,  8,  8,  8,  8,  8,  8,  8,
  213.   8,  8,  8,  8,  7,  7,  7,  7,
  214.   7,  7,  7,  7,  7,  7,  7,  7,
  215.   7,  7,  7,  7,  7,  7,  7,  6,
  216.   6,  7,  7,  7,  7,  7,  7,  7,
  217.   7,  7,  7,  7,  7,  7,  7,  7,
  218.   7,  7,  7,  8,  7,  8,  8,  8,
  219.   8,  8,  8,  8,  8,  8,  8,  8,
  220.   8,  8,  8,  8,  8,  8,  8,  8,
  221.   8,  8,  8,  8,  8,  8,  8,  8,
  222.   8,  8,  8,  8,  8,  8,  8,  8,
  223.   8,  8,  8,  8,  8,  8,  8,  8,
  224.   8,  8,  8,  8,  8,  8,  8,  8,
  225.   8,  8,  8,  8,  8,  8,  8,  8,
  226.   8,  8,  8,  8,  8,  9,  9,  9,
  227.   9,  9,  9,  9,  9,  9,  9,  9,
  228.   9,  9,  9,  9,  9,  9,  9,  9,
  229.   9,  9,  9,  9,  9,  9,  9,  9,
  230.   9,  9,  9,  9,  9,  9,  9,  9,
  231.   9,  9, 10, 10, 10, 10, 11, 11,
  232. };
  233.  
  234. #define MPC8_Q2_SIZE 125
  235. #define MPC8_Q2_BITS 9
  236.  
  237. static const uint8_t mpc8_q2_codes[2][MPC8_Q2_SIZE] = {
  238. {
  239.  0x02, 0x03, 0x0F, 0x04, 0x00, 0x05, 0x0C, 0x12,
  240.  0x0D, 0x06, 0x07, 0x13, 0x15, 0x14, 0x08, 0x09,
  241.  0x0E, 0x15, 0x0F, 0x0A, 0x03, 0x0B, 0x10, 0x0C,
  242.  0x01, 0x0D, 0x10, 0x16, 0x11, 0x0E, 0x12, 0x0F,
  243.  0x10, 0x16, 0x13, 0x17, 0x11, 0x08, 0x12, 0x18,
  244.  0x14, 0x13, 0x14, 0x17, 0x15, 0x0F, 0x16, 0x19,
  245.  0x17, 0x10, 0x11, 0x1A, 0x18, 0x1B, 0x12, 0x1C,
  246.  0x15, 0x09, 0x16, 0x1D, 0x19, 0x0A, 0x07, 0x0B,
  247.  0x1A, 0x1E, 0x17, 0x0C, 0x18, 0x1F, 0x13, 0x20,
  248.  0x1B, 0x21, 0x14, 0x11, 0x18, 0x22, 0x19, 0x12,
  249.  0x1A, 0x19, 0x1A, 0x1B, 0x1B, 0x23, 0x1C, 0x0D,
  250.  0x1D, 0x24, 0x1C, 0x1C, 0x1E, 0x1F, 0x1D, 0x13,
  251.  0x1E, 0x25, 0x1F, 0x14, 0x02, 0x15, 0x15, 0x16,
  252.  0x04, 0x17, 0x20, 0x26, 0x21, 0x18, 0x16, 0x27,
  253.  0x1D, 0x28, 0x19, 0x1A, 0x22, 0x29, 0x23, 0x1B,
  254.  0x03, 0x1C, 0x17, 0x1D, 0x05,
  255. },
  256. {
  257.  0x02, 0x03, 0x0F, 0x04, 0x00, 0x05, 0x0C, 0x0D,
  258.  0x0E, 0x06, 0x07, 0x0F, 0x1E, 0x10, 0x10, 0x08,
  259.  0x11, 0x12, 0x13, 0x09, 0x03, 0x0A, 0x11, 0x0B,
  260.  0x01, 0x0C, 0x14, 0x15, 0x16, 0x0D, 0x17, 0x12,
  261.  0x0E, 0x13, 0x18, 0x19, 0x14, 0x0F, 0x10, 0x1A,
  262.  0x1B, 0x15, 0x11, 0x16, 0x1C, 0x0E, 0x1D, 0x1E,
  263.  0x1F, 0x0F, 0x12, 0x20, 0x1F, 0x21, 0x13, 0x22,
  264.  0x12, 0x13, 0x14, 0x23, 0x20, 0x15, 0x0F, 0x16,
  265.  0x21, 0x24, 0x17, 0x18, 0x19, 0x25, 0x14, 0x26,
  266.  0x22, 0x27, 0x15, 0x10, 0x28, 0x29, 0x2A, 0x11,
  267.  0x2B, 0x17, 0x1A, 0x18, 0x2C, 0x2D, 0x1B, 0x1C,
  268.  0x19, 0x2E, 0x2F, 0x1A, 0x1D, 0x1B, 0x30, 0x12,
  269.  0x31, 0x32, 0x33, 0x13, 0x02, 0x14, 0x15, 0x16,
  270.  0x04, 0x17, 0x34, 0x35, 0x36, 0x18, 0x16, 0x37,
  271.  0x23, 0x38, 0x19, 0x1A, 0x39, 0x3A, 0x3B, 0x1B,
  272.  0x03, 0x1C, 0x17, 0x1D, 0x05,
  273. }
  274. };
  275. static const int8_t mpc8_q2_bits[2][MPC8_Q2_SIZE] = {
  276. {
  277.  12, 11, 10, 11, 13, 11,  9,  8,
  278.   9, 11, 11,  8,  7,  8, 11, 11,
  279.   9,  8,  9, 11, 12, 11, 10, 11,
  280.  13, 11,  9,  8,  9, 11,  9,  6,
  281.   6,  7,  9,  8,  6,  4,  6,  8,
  282.   9,  6,  6,  7,  9, 11,  9,  8,
  283.   9, 11, 10,  8,  7,  8, 10,  8,
  284.   6,  4,  6,  8,  7,  4,  3,  4,
  285.   7,  8,  6,  4,  6,  8, 10,  8,
  286.   7,  8, 10, 11,  9,  8,  9, 11,
  287.   9,  6,  6,  6,  9,  8,  6,  4,
  288.   6,  8,  9,  7,  6,  6,  9, 11,
  289.   9,  8,  9, 11, 13, 11, 10, 11,
  290.  12, 11,  9,  8,  9, 11, 10,  8,
  291.   7,  8, 11, 11,  9,  8,  9, 11,
  292.  13, 11, 10, 11, 12,
  293. },
  294. {
  295.  11, 10,  9, 10, 12, 10,  8,  8,
  296.   8, 10, 10,  8,  7,  8,  9, 10,
  297.   8,  8,  8, 10, 11, 10,  9, 10,
  298.  12, 10,  8,  8,  8, 10,  8,  6,
  299.   5,  6,  8,  8,  6,  5,  5,  8,
  300.   8,  6,  5,  6,  8, 10,  8,  8,
  301.   8, 10,  9,  8,  7,  8,  9,  8,
  302.   5,  5,  5,  8,  7,  5,  4,  5,
  303.   7,  8,  5,  5,  5,  8,  9,  8,
  304.   7,  8,  9, 10,  8,  8,  8, 10,
  305.   8,  6,  5,  6,  8,  8,  5,  5,
  306.   6,  8,  8,  6,  5,  6,  8, 10,
  307.   8,  8,  8, 10, 12, 10, 10, 10,
  308.  11, 10,  8,  8,  8, 10,  9,  8,
  309.   7,  8, 10, 10,  8,  8,  8, 10,
  310.  12, 10,  9, 10, 11,
  311. }
  312. };
  313.  
  314. #define MPC8_Q3_SIZE 49
  315. #define MPC8_Q3_BITS 9
  316. #define MPC8_Q3_OFFSET -48
  317.  
  318. static const uint8_t mpc8_q3_codes[MPC8_Q3_SIZE] = {
  319.  0x07, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x0F,
  320.  0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x13, 0x12, 0x11,
  321.  0x10, 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09,
  322.  0x11, 0x10, 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A,
  323.  0x09, 0x08, 0x07, 0x06, 0x05, 0x09, 0x08, 0x07,
  324.  0x06, 0x05, 0x04, 0x03, 0x02, 0x03, 0x02, 0x01,
  325.  0x00,
  326. };
  327. static const int8_t mpc8_q3_bits[MPC8_Q3_SIZE] = {
  328.   3,  4,  4,  4,  4,  4,  4,  5,
  329.   5,  5,  5,  5,  5,  6,  6,  6,
  330.   6,  6,  6,  6,  6,  6,  6,  6,
  331.   7,  7,  7,  7,  7,  7,  7,  7,
  332.   7,  7,  7,  7,  7,  8,  8,  8,
  333.   8,  8,  8,  8,  8,  9,  9,  9,
  334.   9,
  335. };
  336. static const int8_t mpc8_q3_syms[MPC8_Q3_SIZE] = {
  337.    48,    65,    64,    49,    63,    32,    47,    80,
  338.    79,    50,    62,    33,    16,    82,    81,    95,
  339.    94,    66,    78,    34,    46,    17,    31,    30,
  340.    97,    96,   111,    67,    77,    51,    61,    35,
  341.    45,    18,     1,     0,    15,    98,   110,    83,
  342.    93,    19,    29,     2,    14,    99,   109,     3,
  343.    13,
  344. };
  345.  
  346. #define MPC8_Q4_SIZE 81
  347. #define MPC8_Q4_BITS 9
  348. #define MPC8_Q4_OFFSET -64
  349.  
  350. static const uint8_t mpc8_q4_codes[MPC8_Q4_SIZE] = {
  351.  0x0F, 0x1D, 0x1C, 0x1B, 0x1A, 0x19, 0x18, 0x17,
  352.  0x16, 0x15, 0x14, 0x13, 0x12, 0x23, 0x22, 0x21,
  353.  0x20, 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x19,
  354.  0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11,
  355.  0x10, 0x0F, 0x0E, 0x0D, 0x19, 0x18, 0x17, 0x16,
  356.  0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0F, 0x0E,
  357.  0x0D, 0x0C, 0x17, 0x16, 0x15, 0x14, 0x13, 0x12,
  358.  0x11, 0x10, 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A,
  359.  0x09, 0x08, 0x07, 0x06, 0x05, 0x09, 0x08, 0x07,
  360.  0x06, 0x05, 0x04, 0x03, 0x02, 0x03, 0x02, 0x01,
  361.  0x00,
  362. };
  363. static const int8_t mpc8_q4_bits[MPC8_Q4_SIZE] = {
  364.   4,  5,  5,  5,  5,  5,  5,  5,
  365.   5,  5,  5,  5,  5,  6,  6,  6,
  366.   6,  6,  6,  6,  6,  6,  6,  6,
  367.   6,  6,  6,  6,  6,  6,  6,  6,
  368.   6,  6,  6,  6,  7,  7,  7,  7,
  369.   7,  7,  7,  7,  7,  7,  7,  7,
  370.   7,  7,  8,  8,  8,  8,  8,  8,
  371.   8,  8,  8,  8,  8,  8,  8,  8,
  372.   8,  8,  8,  8,  8,  9,  9,  9,
  373.   9,  9,  9,  9,  9, 10, 10, 10,
  374.  10,
  375. };
  376. static const int8_t mpc8_q4_syms[MPC8_Q4_SIZE] = {
  377.    64,    96,    81,    80,    95,    66,    65,    79,
  378.    78,    49,    48,    63,    32,   113,   112,    98,
  379.    97,   111,   110,    83,    82,    94,    93,    67,
  380.    77,    51,    50,    62,    61,    34,    33,    47,
  381.    46,    17,    16,    31,   128,   114,   127,   126,
  382.    99,   109,    68,    76,    35,    45,    18,    30,
  383.     0,    15,   130,   129,   143,   142,   115,   125,
  384.   100,   108,    84,    92,    52,    60,    36,    44,
  385.    19,    29,     2,     1,    14,   131,   141,   116,
  386.   124,    20,    28,     3,    13,   132,   140,     4,
  387.    12,
  388. };
  389.  
  390. #define MPC8_Q5_SIZE 15
  391. #define MPC8_Q5_BITS 7
  392. #define MPC8_Q5_OFFSET -7
  393.  
  394. static const uint8_t mpc8_q5_codes[2][MPC8_Q5_SIZE] = {
  395. {
  396.  0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03,
  397.  0x04, 0x05, 0x03, 0x03, 0x03, 0x02, 0x03,
  398. },
  399. {
  400.  0x00, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x05,
  401.  0x06, 0x07, 0x04, 0x05, 0x03, 0x02, 0x03,
  402. }
  403. };
  404. static const int8_t mpc8_q5_bits[2][MPC8_Q5_SIZE] = {
  405. {
  406.   7,  7,  6,  5,  4,  3,  3,  2,
  407.   3,  3,  4,  5,  6,  7,  7,
  408. },
  409. {
  410.   6,  6,  5,  4,  4,  3,  3,  3,
  411.   3,  3,  4,  4,  5,  6,  6,
  412. }
  413. };
  414.  
  415. #define MPC8_Q6_SIZE 31
  416. #define MPC8_Q6_BITS 9
  417. #define MPC8_Q6_OFFSET -15
  418.  
  419. static const uint8_t mpc8_q6_codes[2][MPC8_Q6_SIZE] = {
  420. {
  421.  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x04, 0x03,
  422.  0x04, 0x05, 0x05, 0x06, 0x04, 0x05, 0x04, 0x03,
  423.  0x05, 0x06, 0x07, 0x07, 0x06, 0x07, 0x08, 0x09,
  424.  0x05, 0x06, 0x07, 0x04, 0x05, 0x06, 0x07,
  425. },
  426. {
  427.  0x00, 0x01, 0x02, 0x03, 0x04, 0x04, 0x05, 0x04,
  428.  0x05, 0x06, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
  429.  0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x07, 0x08, 0x09,
  430.  0x06, 0x07, 0x05, 0x06, 0x07, 0x02, 0x03,
  431. }
  432. };
  433. static const int8_t mpc8_q6_bits[2][MPC8_Q6_SIZE] = {
  434. {
  435.   9,  9,  9,  9,  8,  8,  7,  6,
  436.   6,  6,  5,  5,  4,  4,  3,  2,
  437.   3,  4,  4,  5,  6,  6,  6,  6,
  438.   7,  8,  8,  9,  9,  9,  9,
  439. },
  440. {
  441.   8,  8,  7,  7,  7,  6,  6,  5,
  442.   5,  5,  4,  4,  4,  4,  4,  4,
  443.   4,  4,  4,  4,  4,  5,  5,  5,
  444.   6,  6,  7,  7,  7,  8,  8,
  445. }
  446. };
  447.  
  448. #define MPC8_Q7_SIZE 63
  449. #define MPC8_Q7_BITS 9
  450. #define MPC8_Q7_OFFSET -31
  451.  
  452. static const uint8_t mpc8_q7_codes[2][MPC8_Q7_SIZE] = {
  453. {
  454.  0x00, 0x01, 0x02, 0x08, 0x09, 0x03, 0x04, 0x05,
  455.  0x06, 0x07, 0x0A, 0x0B, 0x0C, 0x0D, 0x0A, 0x0B,
  456.  0x0C, 0x0D, 0x0E, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
  457.  0x0A, 0x0B, 0x0C, 0x08, 0x09, 0x06, 0x04, 0x03,
  458.  0x05, 0x07, 0x0A, 0x0B, 0x0D, 0x0E, 0x0F, 0x0F,
  459.  0x10, 0x11, 0x12, 0x0F, 0x13, 0x10, 0x11, 0x12,
  460.  0x13, 0x0E, 0x0F, 0x10, 0x11, 0x08, 0x09, 0x0A,
  461.  0x0B, 0x0C, 0x12, 0x13, 0x0D, 0x0E, 0x0F,
  462. },
  463. {
  464.  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
  465.  0x08, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x09, 0x0A,
  466.  0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x0C, 0x0D,
  467.  0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15,
  468.  0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,
  469.  0x1E, 0x1F, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
  470.  0x17, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x09, 0x0A,
  471.  0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x02, 0x03,
  472. }
  473. };
  474. static const int8_t mpc8_q7_bits[2][MPC8_Q7_SIZE] = {
  475. {
  476.  10, 10, 10,  9,  9, 10, 10, 10,
  477.  10, 10,  9,  9,  9,  9,  8,  8,
  478.   8,  8,  8,  7,  7,  7,  7,  7,
  479.   6,  6,  6,  5,  5,  4,  3,  2,
  480.   3,  4,  5,  5,  6,  6,  6,  7,
  481.   7,  7,  7,  8,  7,  8,  8,  8,
  482.   8,  9,  9,  9,  9, 10, 10, 10,
  483.  10, 10,  9,  9, 10, 10, 10,
  484. },
  485. {
  486.   9,  9,  8,  8,  8,  8,  8,  8,
  487.   8,  7,  7,  7,  7,  7,  6,  6,
  488.   6,  6,  6,  6,  6,  6,  5,  5,
  489.   5,  5,  5,  5,  5,  5,  5,  5,
  490.   5,  5,  5,  5,  5,  5,  5,  5,
  491.   5,  5,  6,  6,  6,  6,  6,  6,
  492.   6,  7,  7,  7,  7,  7,  8,  8,
  493.   8,  8,  8,  8,  8,  9,  9,
  494. }
  495. };
  496.  
  497. #define MPC8_Q8_SIZE 127
  498. #define MPC8_Q8_BITS 9
  499. #define MPC8_Q8_OFFSET -63
  500.  
  501. static const uint8_t mpc8_q8_codes[2][MPC8_Q8_SIZE] = {
  502. {
  503.  0x03, 0x04, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x1A,
  504.  0x0F, 0x1B, 0x10, 0x00, 0x01, 0x05, 0x06, 0x07,
  505.  0x08, 0x09, 0x0A, 0x0B, 0x11, 0x0C, 0x12, 0x13,
  506.  0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1C, 0x1A,
  507.  0x1B, 0x1C, 0x1D, 0x1E, 0x1D, 0x1E, 0x1F, 0x20,
  508.  0x21, 0x22, 0x23, 0x24, 0x19, 0x25, 0x1A, 0x1B,
  509.  0x1C, 0x1D, 0x1E, 0x1F, 0x14, 0x15, 0x16, 0x17,
  510.  0x0E, 0x0F, 0x10, 0x11, 0x0B, 0x07, 0x04, 0x03,
  511.  0x05, 0x0C, 0x0D, 0x12, 0x13, 0x14, 0x15, 0x18,
  512.  0x19, 0x1A, 0x1B, 0x20, 0x21, 0x22, 0x23, 0x24,
  513.  0x25, 0x26, 0x27, 0x26, 0x27, 0x28, 0x29, 0x2A,
  514.  0x2B, 0x2C, 0x2D, 0x2E, 0x1F, 0x20, 0x2F, 0x21,
  515.  0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29,
  516.  0x0D, 0x0E, 0x2A, 0x0F, 0x10, 0x11, 0x12, 0x02,
  517.  0x13, 0x03, 0x04, 0x05, 0x2B, 0x2C, 0x30, 0x31,
  518.  0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33,
  519. },
  520. {
  521.  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
  522.  0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
  523.  0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x15, 0x16,
  524.  0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E,
  525.  0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,
  526.  0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E,
  527.  0x2F, 0x30, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B,
  528.  0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33,
  529.  0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B,
  530.  0x3C, 0x3D, 0x3E, 0x31, 0x3F, 0x32, 0x33, 0x34,
  531.  0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C,
  532.  0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44,
  533.  0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x16,
  534.  0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E,
  535.  0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,
  536.  0x27, 0x28, 0x29, 0x04, 0x05, 0x06, 0x07,
  537. }
  538. };
  539. static const int8_t mpc8_q8_bits[2][MPC8_Q8_SIZE] = {
  540. {
  541.  11, 11, 10, 10, 10, 10, 10,  9,
  542.  10,  9, 10, 12, 12, 11, 11, 11,
  543.  11, 11, 11, 11, 10, 11, 10, 10,
  544.  10, 10, 10, 10, 10, 10,  9, 10,
  545.  10, 10, 10, 10,  9,  9,  9,  9,
  546.   9,  9,  9,  9,  8,  9,  8,  8,
  547.   8,  8,  8,  8,  7,  7,  7,  7,
  548.   6,  6,  6,  6,  5,  4,  3,  2,
  549.   3,  5,  5,  6,  6,  6,  6,  7,
  550.   7,  7,  7,  8,  8,  8,  8,  8,
  551.   8,  8,  8,  9,  9,  9,  9,  9,
  552.   9,  9,  9,  9, 10, 10,  9, 10,
  553.  10, 10, 10, 10, 10, 10, 10, 10,
  554.  11, 11, 10, 11, 11, 11, 11, 12,
  555.  11, 12, 12, 12, 10, 10,  9,  9,
  556.  10, 10, 10, 10, 10, 10, 10,
  557. },
  558. {
  559.   9,  9,  9,  9,  8,  8,  8,  8,
  560.   8,  8,  8,  8,  8,  8,  8,  8,
  561.   8,  8,  8,  8,  8,  8,  7,  7,
  562.   7,  7,  7,  7,  7,  7,  7,  7,
  563.   7,  7,  7,  7,  7,  7,  7,  7,
  564.   7,  7,  7,  7,  7,  7,  7,  7,
  565.   7,  7,  6,  6,  6,  6,  6,  6,
  566.   6,  6,  6,  6,  6,  6,  6,  6,
  567.   6,  6,  6,  6,  6,  6,  6,  6,
  568.   6,  6,  6,  7,  6,  7,  7,  7,
  569.   7,  7,  7,  7,  7,  7,  7,  7,
  570.   7,  7,  7,  7,  7,  7,  7,  7,
  571.   7,  7,  7,  7,  7,  7,  7,  8,
  572.   8,  8,  8,  8,  8,  8,  8,  8,
  573.   8,  8,  8,  8,  8,  8,  8,  8,
  574.   8,  8,  8,  9,  9,  9,  9,
  575. }
  576. };
  577.  
  578. #endif /* AVCODEC_MPC8HUFF_H */
  579.