Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * VC3/DNxHD data.
  3.  * Copyright (c) 2007 SmartJog S.A., Baptiste Coudurier <baptiste dot coudurier at smartjog dot com>
  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. #include "avcodec.h"
  23. #include "dnxhddata.h"
  24. #include "libavutil/common.h"
  25.  
  26. /* The quantization tables below are in zigzag order! */
  27.  
  28. /* Used in CID 1235, 1256 */
  29. static const uint8_t dnxhd_1235_luma_weight[] = {
  30.      0, 32, 32, 32, 33, 32, 32, 32,
  31.     32, 31, 32, 33, 33, 33, 33, 35,
  32.     36, 36, 34, 34, 36, 37, 37, 36,
  33.     36, 35, 36, 38, 39, 39, 37, 36,
  34.     37, 37, 39, 41, 42, 41, 39, 39,
  35.     40, 41, 42, 43, 42, 42, 41, 41,
  36.     41, 44, 47, 46, 46, 48, 51, 51,
  37.     50, 50, 53, 55, 55, 56, 60, 60,
  38. };
  39.  
  40. static const uint8_t dnxhd_1235_chroma_weight[] = {
  41.      0, 32, 33, 34, 34, 33, 34, 35,
  42.     37, 40, 43, 42, 39, 38, 39, 41,
  43.     43, 44, 47, 50, 55, 61, 63, 56,
  44.     48, 46, 49, 54, 59, 58, 55, 58,
  45.     63, 65, 67, 74, 84, 82, 75, 72,
  46.     70, 74, 84, 87, 87, 94, 93, 81,
  47.     75, 78, 83, 89, 91, 86, 82, 85,
  48.     90, 90, 85, 79, 73, 73, 73, 73,
  49. };
  50.  
  51. /* Used in CID 1237, 1253, 1259 */
  52. static const uint8_t dnxhd_1237_luma_weight[] = {
  53.      0,  32,  33,  34, 34, 36, 37, 36,
  54.     36,  37,  38,  38, 38, 39, 41, 44,
  55.     43,  41,  40,  41, 46, 49, 47, 46,
  56.     47,  49,  51,  54, 60, 62, 59, 55,
  57.     54,  56,  58,  61, 65, 66, 64, 63,
  58.     66,  73,  78,  79, 80, 79, 78, 78,
  59.     82,  87,  89,  90, 93, 95, 96, 97,
  60.     97, 100, 104, 102, 98, 98, 99, 99,
  61. };
  62.  
  63. /* Used in CID 1237, 1253, 1259 */
  64. static const uint8_t dnxhd_1237_chroma_weight[] = {
  65.      0,  32,  36,  39, 39, 38, 39,  41,
  66.     45,  51,  57,  58, 53, 48, 47,  51,
  67.     55,  58,  66,  75, 81, 83, 82,  78,
  68.     73,  72,  74,  77, 83, 85, 83,  82,
  69.     89,  99,  96,  90, 94, 97, 99, 105,
  70.    109, 105,  95,  89, 92, 95, 94,  93,
  71.     92,  88,  89,  90, 93, 95, 96,  97,
  72.     97, 100, 104, 102, 98, 98, 99,  99,
  73. };
  74.  
  75. static const uint8_t dnxhd_1238_luma_weight[] = {
  76.      0, 32, 32, 33, 34, 33, 33, 33,
  77.     33, 33, 33, 33, 33, 35, 37, 37,
  78.     36, 36, 35, 36, 38, 38, 36, 35,
  79.     36, 37, 38, 41, 42, 41, 39, 38,
  80.     38, 38, 39, 41, 42, 41, 39, 39,
  81.     40, 41, 43, 44, 44, 44, 44, 44,
  82.     45, 47, 47, 47, 49, 50, 51, 51,
  83.     51, 53, 55, 57, 58, 59, 57, 57,
  84. };
  85.  
  86. static const uint8_t dnxhd_1238_chroma_weight[] = {
  87.      0, 32, 35, 35, 35, 34, 34, 35,
  88.     39, 43, 45, 45, 41, 39, 40, 41,
  89.     42, 44, 48, 55, 59, 63, 65, 59,
  90.     53, 52, 52, 55, 61, 62, 58, 58,
  91.     63, 66, 66, 65, 70, 74, 70, 66,
  92.     65, 68, 75, 77, 74, 74, 77, 76,
  93.     73, 73, 73, 73, 76, 80, 89, 90,
  94.     82, 77, 80, 86, 84, 82, 82, 82,
  95. };
  96.  
  97. static const uint8_t dnxhd_1241_luma_weight[] = {
  98.      0, 32, 33, 34, 34, 35, 36, 37,
  99.     36, 37, 38, 38, 38, 39, 39, 40,
  100.     40, 38, 38, 39, 38, 37, 39, 41,
  101.     41, 42, 43, 45, 45, 46, 47, 46,
  102.     45, 43, 39, 37, 37, 40, 44, 45,
  103.     45, 46, 46, 46, 47, 47, 46, 44,
  104.     42, 43, 45, 47, 48, 49, 50, 49,
  105.     48, 46, 47, 48, 48, 49, 49, 49,
  106. };
  107.  
  108. static const uint8_t dnxhd_1241_chroma_weight[] = {
  109.      0, 32, 36, 38, 37, 37, 40, 41,
  110.     40, 40, 42, 42, 41, 41, 41, 41,
  111.     42, 43, 44, 44, 45, 46, 46, 45,
  112.     44, 45, 45, 45, 45, 46, 47, 46,
  113.     45, 44, 42, 41, 43, 45, 45, 47,
  114.     48, 48, 48, 46, 47, 47, 46, 47,
  115.     46, 45, 45, 47, 48, 49, 50, 49,
  116.     48, 46, 48, 49, 48, 49, 49, 49,
  117. };
  118.  
  119. static const uint8_t dnxhd_1242_luma_weight[] = {
  120.      0, 32, 33, 33, 34, 35, 36, 35,
  121.     33, 33, 35, 36, 37, 37, 38, 37,
  122.     37, 37, 36, 37, 37, 37, 38, 39,
  123.     37, 36, 37, 40, 42, 45, 46, 44,
  124.     41, 42, 44, 45, 47, 49, 50, 48,
  125.     46, 48, 49, 50, 52, 52, 50, 49,
  126.     47, 48, 50, 50, 51, 51, 50, 49,
  127.     49, 51, 52, 51, 49, 47, 47, 47,
  128. };
  129.  
  130. static const uint8_t dnxhd_1242_chroma_weight[] = {
  131.      0, 32, 37, 42, 45, 45, 45, 44,
  132.     38, 37, 40, 42, 44, 49, 51, 47,
  133.     41, 40, 43, 44, 46, 48, 51, 54,
  134.     51, 47, 47, 45, 47, 50, 51, 49,
  135.     46, 47, 49, 47, 50, 55, 55, 51,
  136.     48, 49, 51, 51, 52, 52, 54, 54,
  137.     49, 49, 52, 53, 54, 54, 53, 53,
  138.     55, 59, 63, 62, 60, 60, 60, 60,
  139. };
  140.  
  141. static const uint8_t dnxhd_1243_luma_weight[] = {
  142.      0, 32, 32, 33, 33, 35, 35, 35,
  143.     35, 35, 35, 35, 34, 35, 38, 40,
  144.     39, 37, 37, 37, 36, 35, 36, 38,
  145.     40, 41, 42, 44, 45, 44, 42, 41,
  146.     40, 38, 36, 36, 37, 38, 40, 43,
  147.     44, 45, 45, 45, 45, 45, 45, 41,
  148.     39, 41, 45, 47, 47, 48, 48, 48,
  149.     46, 44, 45, 47, 47, 48, 47, 47,
  150. };
  151.  
  152. static const uint8_t dnxhd_1243_chroma_weight[] = {
  153.      0, 32, 36, 37, 36, 37, 39, 39,
  154.     41, 43, 43, 42, 41, 41, 41, 42,
  155.     43, 43, 43, 44, 44, 44, 46, 47,
  156.     46, 45, 45, 45, 45, 46, 44, 44,
  157.     45, 44, 42, 41, 43, 46, 45, 44,
  158.     45, 45, 45, 46, 46, 46, 45, 44,
  159.     45, 44, 45, 47, 47, 48, 49, 48,
  160.     46, 45, 46, 47, 47, 48, 47, 47,
  161. };
  162.  
  163. static const uint8_t dnxhd_1250_luma_weight[] = {
  164.      0, 32, 32, 33, 34, 35, 35, 35,
  165.     34, 34, 35, 36, 36, 36, 36, 36,
  166.     37, 38, 38, 38, 38, 38, 39, 39,
  167.     38, 38, 39, 41, 43, 43, 42, 41,
  168.     40, 40, 39, 40, 41, 41, 39, 39,
  169.     40, 42, 47, 50, 47, 45, 46, 46,
  170.     44, 45, 46, 47, 49, 54, 58, 54,
  171.     48, 49, 54, 57, 60, 62, 63, 63,
  172. };
  173.  
  174. static const uint8_t dnxhd_1250_chroma_weight[] = {
  175.      0, 32, 35, 36, 36, 35, 36, 39,
  176.     41, 43, 45, 44, 41, 39, 40, 42,
  177.     43, 43, 45, 48, 49, 51, 52, 50,
  178.     50, 51, 51, 51, 51, 52, 53, 54,
  179.     51, 49, 51, 52, 52, 56, 57, 55,
  180.     54, 54, 55, 56, 55, 58, 58, 58,
  181.     60, 61, 62, 62, 59, 57, 58, 58,
  182.     61, 59, 59, 59, 60, 62, 63, 63,
  183. };
  184.  
  185. static const uint8_t dnxhd_1251_luma_weight[] = {
  186.      0, 32, 32, 34, 34, 34, 34, 35,
  187.     35, 35, 36, 37, 36, 36, 35, 36,
  188.     38, 38, 38, 38, 38, 38, 38, 38,
  189.     38, 38, 39, 41, 44, 43, 41, 40,
  190.     40, 40, 40, 39, 40, 41, 40, 39,
  191.     40, 43, 46, 46, 44, 44, 44, 42,
  192.     41, 43, 46, 48, 50, 55, 58, 53,
  193.     48, 50, 55, 58, 61, 62, 62, 62,
  194. };
  195.  
  196. static const uint8_t dnxhd_1251_chroma_weight[] = {
  197.      0, 32, 35, 36, 36, 35, 36, 39,
  198.     41, 43, 45, 44, 41, 39, 40, 42,
  199.     43, 43, 45, 48, 48, 48, 50, 50,
  200.     50, 51, 51, 51, 51, 52, 53, 54,
  201.     51, 49, 51, 52, 52, 56, 57, 55,
  202.     54, 54, 55, 56, 55, 58, 58, 58,
  203.     60, 61, 62, 62, 59, 57, 58, 58,
  204.     61, 59, 59, 59, 61, 62, 62, 62,
  205. };
  206.  
  207. /* Used in CID 1252, 1258 */
  208. static const uint8_t dnxhd_1252_luma_weight[] = {
  209.       0,  32,  34, 35, 36, 36, 36, 37,
  210.      36,  37,  39, 40, 41, 40, 40, 40,
  211.      41,  41,  42, 41, 41, 43, 44, 44,
  212.      45,  46,  48, 55, 60, 57, 52, 50,
  213.      49,  49,  52, 52, 53, 55, 58, 62,
  214.      65,  73,  82, 82, 80, 78, 73, 68,
  215.      71,  82,  90, 90, 88, 87, 90, 95,
  216.     100, 107, 103, 97, 95, 93, 99, 99,
  217. };
  218.  
  219. /* Used in CID 1252, 1258 */
  220. static const uint8_t dnxhd_1252_chroma_weight[] = {
  221.       0,  32,  35,  36,  37,  37,  38,  40,
  222.      42,  46,  49,  50,  50,  49,  49,  53,
  223.      56,  56,  57,  58,  60,  62,  64,  65,
  224.      63,  64,  64,  65,  66,  65,  67,  71,
  225.      72,  74,  74,  74,  74,  77,  81,  78,
  226.      72,  73,  82,  85,  89,  88,  84,  80,
  227.      90, 100,  90,  90,  88,  87,  90,  95,
  228.     114, 128, 125, 129, 134, 125, 116, 116,
  229. };
  230.  
  231. static const uint8_t dnxhd_1256_chroma_weight[] = {
  232.      0, 32, 32, 32, 32, 32, 32, 32,
  233.     32, 32, 32, 32, 32, 32, 32, 32,
  234.     32, 32, 32, 32, 32, 32, 37, 32,
  235.     32, 32, 32, 32, 33, 32, 32, 32,
  236.     32, 32, 33, 34, 37, 36, 32, 32,
  237.     32, 33, 34, 37, 36, 34, 35, 36,
  238.     39, 44, 40, 40, 39, 39, 44, 43,
  239.     43, 51, 56, 50, 49, 60, 61, 70,
  240. };
  241.  
  242. static const uint8_t dnxhd_1260_luma_weight[] = {
  243.      0, 32, 33, 34, 36, 37, 37, 36,
  244.     34, 33, 34, 35, 37, 38, 40, 41,
  245.     40, 39, 38, 37, 34, 33, 34, 37,
  246.     40, 44, 48, 52, 53, 49, 47, 45,
  247.     42, 38, 36, 36, 38, 41, 43, 44,
  248.     46, 49, 52, 54, 54, 49, 44, 44,
  249.     44, 47, 51, 51, 52, 51, 48, 50,
  250.     52, 53, 53, 50, 50, 54, 54, 54,
  251. };
  252.  
  253. static const uint8_t dnxhd_1260_chroma_weight[] = {
  254.      0, 32, 34, 38, 42, 40, 38, 36,
  255.     35, 35, 38, 42, 43, 43, 42, 40,
  256.     38, 39, 43, 43, 42, 41, 43, 43,
  257.     42, 44, 46, 45, 45, 46, 47, 46,
  258.     44, 44, 45, 46, 46, 46, 50, 50,
  259.     47, 47, 49, 49, 49, 49, 51, 53,
  260.     51, 49, 53, 57, 56, 52, 50, 52,
  261.     56, 56, 53, 53, 53, 54, 58, 58,
  262. };
  263.  
  264. /* Used in CID 1235, 1241, 1250, 1256 */
  265. static const uint8_t dnxhd_1235_dc_codes[14] = {
  266.     10, 62, 11, 12, 13, 0, 1, 2, 3, 4, 14, 30, 126, 127,
  267. };
  268.  
  269. /* Used in CID 1235, 1241, 1250, 1256 */
  270. static const uint8_t dnxhd_1235_dc_bits[14] = {
  271.     4, 6, 4, 4, 4, 3, 3, 3, 3, 3, 4, 5, 7, 7,
  272. };
  273.  
  274. /* Used in CID 1237, 1238, 1242, 1243, 1251, 1252, 1253, 1258, 1259, 1260 */
  275. static const uint8_t dnxhd_1237_dc_codes[12] = {
  276.     0, 12, 13, 1, 2, 3, 4, 5, 14, 30, 62, 63,
  277. };
  278.  
  279. /* Used in CID 1237, 1238, 1242, 1243, 1251, 1252, 1253, 1258, 1259, 1260 */
  280. static const uint8_t dnxhd_1237_dc_bits[12] = {
  281.     3, 4, 4, 3, 3, 3, 3, 3, 4, 5, 6, 6,
  282. };
  283.  
  284. /* Used in CID 1237, 1242, 1253, 1259, 1260 */
  285. static const uint16_t dnxhd_1237_ac_codes[257] = {
  286.         0,     1,     4,     5,    12,    26,    27,    56,
  287.        57,    58,    59,   120,   121,   244,   245,   246,
  288.       247,   248,   498,   499,   500,   501,   502,  1006,
  289.      1007,  1008,  1009,  1010,  1011,  2024,  2025,  2026,
  290.      2027,  2028,  2029,  2030,  2031,  4064,  4065,  4066,
  291.      4067,  4068,  4069,  4070,  4071,  4072,  4073,  8148,
  292.      8149,  8150,  8151,  8152,  8153,  8154,  8155,  8156,
  293.      8157,  8158, 16318, 16319, 16320, 16321, 16322, 16323,
  294.     16324, 16325, 16326, 16327, 16328, 16329, 16330, 16331,
  295.     16332, 16333, 32668, 32669, 32670, 32671, 32672, 32673,
  296.     32674, 32675, 32676, 32677, 32678, 32679, 32680, 32681,
  297.     32682, 32683, 32684, 65370, 65371, 65372, 65373, 65374,
  298.     65375, 65376, 65377, 65378, 65379, 65380, 65381, 65382,
  299.     65383, 65384, 65385, 65386, 65387, 65388, 65389, 65390,
  300.     65391, 65392, 65393, 65394, 65395, 65396, 65397, 65398,
  301.     65399, 65400, 65401, 65402, 65403, 65404, 65405, 65406,
  302.     65407, 65408, 65409, 65410, 65411, 65412, 65413, 65414,
  303.     65415, 65416, 65417, 65418, 65419, 65420, 65421, 65422,
  304.     65423, 65424, 65425, 65426, 65427, 65428, 65429, 65430,
  305.     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
  306.     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
  307.     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
  308.     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
  309.     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
  310.     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
  311.     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
  312.     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
  313.     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
  314.     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
  315.     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
  316.     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
  317.     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
  318.     65535,
  319. };
  320.  
  321. /* Used in CID 1237, 1242, 1253, 1259, 1260 */
  322. static const uint8_t dnxhd_1237_ac_bits[257] = {
  323.      2,  2,  3,  3,  4,  5,  5,  6,  6,  6,  6,  7,  7,  8,  8,  8,
  324.      8,  8,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 11, 11, 11,
  325.     11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13,
  326.     13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14,
  327.     14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15,
  328.     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16,
  329.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  330.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  331.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  332.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  333.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  334.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  335.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  336.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  337.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  338.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  339.     16,
  340. };
  341.  
  342. /* Used in CID 1237, 1242, 1253, 1259, 1260 */
  343. static const uint8_t dnxhd_1237_ac_level[257] = {
  344.       3,  3,  5,  0,  7,  9,  5, 11, 13, 15,  7, 17, 19, 21, 23, 25,
  345.       9, 11, 27, 29, 31, 33, 13, 35, 37, 39, 41, 43, 15, 45, 47, 49,
  346.      51, 53, 55, 17, 19, 57, 59, 61, 63, 65, 67, 69, 21, 23, 25, 71,
  347.      73, 75, 77, 79, 81, 83, 27, 29, 31, 33, 85, 87, 89, 91, 93, 95,
  348.      97, 99,101,103,105, 35, 37, 39, 41, 43,107,109,111,113,115,117,
  349.     119,121,123,129,  3, 45, 47, 49, 51, 53, 55,125,127,  5,  7,  9,
  350.      11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41,
  351.      43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73,
  352.      75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99,101,103,105,
  353.     107,109,111,113,115,117,119,121,123,125,127,129, 57, 59, 61, 63,
  354.      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
  355.      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
  356.     129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
  357.      33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,
  358.      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
  359.      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
  360.     129,
  361. };
  362.  
  363. /* Used in CID 1237, 1242, 1253, 1259, 1260 */
  364. static const uint8_t dnxhd_1237_ac_flags[257] = {
  365.     0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0,
  366.     2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0,
  367.     0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0,
  368.     0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
  369.     0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0,
  370.     0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1,
  371.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  372.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  373.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  374.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
  375.     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  376.     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  377.     2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  378.     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  379.     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  380.     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  381.     3,
  382. };
  383.  
  384. /* Used in CID 1238, 1243 */
  385. static const uint16_t dnxhd_1238_ac_codes[257] = {
  386.         0,     1,     4,    10,    11,    24,    25,    26,
  387.        54,    55,    56,    57,   116,   117,   118,   119,
  388.       240,   241,   242,   243,   244,   245,   492,   493,
  389.       494,   495,   496,   497,   498,   499,  1000,  1001,
  390.      1002,  1003,  1004,  1005,  1006,  1007,  1008,  2018,
  391.      2019,  2020,  2021,  2022,  2023,  2024,  2025,  2026,
  392.      2027,  4056,  4057,  4058,  4059,  4060,  4061,  4062,
  393.      4063,  4064,  4065,  4066,  4067,  4068,  4069,  8140,
  394.      8141,  8142,  8143,  8144,  8145,  8146,  8147,  8148,
  395.      8149,  8150,  8151,  8152,  8153,  8154,  8155,  8156,
  396.     16314, 16315, 16316, 16317, 16318, 16319, 16320, 16321,
  397.     16322, 16323, 16324, 16325, 16326, 16327, 16328, 16329,
  398.     16330, 16331, 16332, 16333, 16334, 16335, 16336, 16337,
  399.     16338, 32678, 32679, 32680, 32681, 32682, 32683, 32684,
  400.     32685, 32686, 32687, 32688, 32689, 32690, 32691, 32692,
  401.     32693, 32694, 32695, 32696, 32697, 32698, 32699, 32700,
  402.     32701, 32702, 32703, 32704, 32705, 65412, 65413, 65414,
  403.     65415, 65416, 65417, 65418, 65419, 65420, 65421, 65422,
  404.     65423, 65424, 65425, 65426, 65427, 65428, 65429, 65430,
  405.     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
  406.     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
  407.     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
  408.     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
  409.     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
  410.     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
  411.     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
  412.     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
  413.     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
  414.     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
  415.     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
  416.     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
  417.     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
  418.     65535,
  419. };
  420.  
  421. /* Used in CID 1238, 1243 */
  422. static const uint8_t dnxhd_1238_ac_bits[257] = {
  423.      2,  2,  3,  4,  4,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,
  424.      8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10,
  425.     10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11,
  426.     11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13,
  427.     13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  428.     14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  429.     14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15,
  430.     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  431.     15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  432.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  433.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  434.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  435.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  436.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  437.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  438.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  439.     16,
  440. };
  441.  
  442. /* Used in CID 1238, 1243 */
  443. static const uint8_t dnxhd_1238_ac_level[257] = {
  444.       3,  3,  5,  7,  0,  9, 11,  5, 13, 15, 17,  7, 19, 21, 23,  9,
  445.      25, 27, 29, 31, 33, 11, 35, 37, 39, 41, 43, 45, 13, 15, 47, 49,
  446.      51, 53, 55, 57, 59, 17, 19, 61, 63, 65, 67, 69, 71, 73, 75, 21,
  447.      23, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 25, 27, 29, 99,
  448.     101,103,105,107,109,111,113,115,117,119,121,123, 31, 33, 35, 37,
  449.     125,127,129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27,
  450.      29, 31, 33, 39, 41, 43, 45, 47, 49, 35, 37, 39, 41, 43, 45, 47,
  451.      49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 81, 51,
  452.      53, 55, 57, 59, 61, 77, 79, 83, 85, 87, 89, 91, 93, 95, 97, 99,
  453.     101,103,105,107,109,111,113,115,117,119,121,123,125,127,129, 63,
  454.      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
  455.      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
  456.     129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
  457.      33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,
  458.      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
  459.      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
  460.     129,
  461. }; /* 0 is EOB */
  462.  
  463. static const uint8_t dnxhd_1238_ac_flags[257] = {
  464.     0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2,
  465.     0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0,
  466.     0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2,
  467.     2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0,
  468.     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2,
  469.     0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  470.     1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
  471.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
  472.     2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  473.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
  474.     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  475.     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  476.     2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  477.     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  478.     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  479.     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  480.     3,
  481. };
  482.  
  483. /* Used in CID 1235, 1241, 1256 */
  484. static const uint16_t dnxhd_1235_ac_codes[257] = {
  485.         0,     1,     4,    10,    11,    24,    25,    26,
  486.        54,    55,    56,    57,   116,   117,   118,   119,
  487.       240,   241,   242,   243,   244,   245,   492,   493,
  488.       494,   495,   496,   497,   498,   998,   999,  1000,
  489.      1001,  1002,  1003,  1004,  1005,  1006,  1007,  2016,
  490.      2017,  2018,  2019,  2020,  2021,  2022,  2023,  2024,
  491.      2025,  2026,  4054,  4055,  4056,  4057,  4058,  4059,
  492.      4060,  4061,  4062,  4063,  4064,  4065,  4066,  4067,
  493.      4068,  4069,  8140,  8141,  8142,  8143,  8144,  8145,
  494.      8146,  8147,  8148,  8149,  8150,  8151,  8152,  8153,
  495.      8154,  8155,  8156,  8157, 16316, 16317, 16318, 16319,
  496.     16320, 16321, 16322, 16323, 16324, 16325, 16326, 16327,
  497.     16328, 16329, 16330, 16331, 16332, 16333, 16334, 16335,
  498.     16336, 16337, 32676, 32677, 32678, 32679, 32680, 32681,
  499.     32682, 32683, 32684, 32685, 32686, 32687, 32688, 32689,
  500.     32690, 32691, 32692, 32693, 32694, 32695, 32696, 32697,
  501.     32698, 32699, 32700, 32701, 32702, 32703, 32704, 32705,
  502.     32706, 32707, 32708, 65418, 65419, 65420, 65421, 65422,
  503.     65423, 65424, 65425, 65426, 65427, 65428, 65429, 65430,
  504.     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
  505.     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
  506.     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
  507.     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
  508.     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
  509.     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
  510.     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
  511.     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
  512.     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
  513.     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
  514.     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
  515.     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
  516.     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
  517.     65535,
  518. };
  519.  
  520. /* Used in CID 1235, 1241, 1256 */
  521. static const uint8_t dnxhd_1235_ac_bits[257] = {
  522.      2,  2,  3,  4,  4,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,
  523.      8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10,
  524.     10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11,
  525.     11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
  526.     12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  527.     13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  528.     14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15,
  529.     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  530.     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16,
  531.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  532.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  533.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  534.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  535.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  536.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  537.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  538.     16,
  539. };
  540.  
  541. /* Used in CID 1235, 1241, 1256 */
  542. static const uint8_t dnxhd_1235_ac_level[257] = {
  543.       3,  3,  5,  7,  0,  9, 11,  5, 13, 15, 17,  7, 19, 21, 23,  9,
  544.      25, 27, 29, 31, 33, 11, 35, 37, 39, 41, 43, 13, 15, 45, 47, 49,
  545.      51, 53, 55, 57, 59, 17, 19, 61, 63, 65, 67, 69, 71, 73, 75, 77,
  546.      21, 23, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99,101, 25, 27,
  547.      29, 31,103,105,107,109,111,113,115,117,119,121,123,125,127,  3,
  548.      33, 35, 37, 39,129,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25,
  549.      27, 29, 31, 33, 35, 41, 43, 45, 47, 49, 37, 39, 41, 43, 45, 47,
  550.      49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79,
  551.      81, 83, 85, 51, 53, 55, 57, 59, 61, 63, 65, 87, 89, 91, 93, 95,
  552.      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
  553.     129, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
  554.      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
  555.     129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
  556.      33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,
  557.      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
  558.      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
  559.     129,
  560. };
  561.  
  562. /* Used in CID 1235, 1241, 1256 */
  563. static const uint8_t dnxhd_1235_ac_flags[257] = {
  564.     0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2,
  565.     0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0,
  566.     0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  567.     2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
  568.     2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
  569.     2, 2, 2, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  570.     1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
  571.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  572.     1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
  573.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  574.     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  575.     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  576.     2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  577.     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  578.     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  579.     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  580.     3,
  581. };
  582.  
  583. static const uint16_t dnxhd_1250_ac_codes[257] = {
  584.         0,     1,     4,    10,    11,    24,    25,    26,
  585.        54,    55,    56,    57,   116,   117,   118,   119,
  586.       240,   241,   242,   243,   244,   245,   492,   493,
  587.       494,   495,   496,   497,   498,   998,   999,  1000,
  588.      1001,  1002,  1003,  1004,  1005,  1006,  2014,  2015,
  589.      2016,  2017,  2018,  2019,  2020,  2021,  2022,  2023,
  590.      2024,  2025,  4052,  4053,  4054,  4055,  4056,  4057,
  591.      4058,  4059,  4060,  4061,  4062,  4063,  4064,  4065,
  592.      4066,  4067,  8136,  8137,  8138,  8139,  8140,  8141,
  593.      8142,  8143,  8144,  8145,  8146,  8147,  8148,  8149,
  594.      8150,  8151,  8152,  8153,  8154,  8155,  8156, 16314,
  595.     16315, 16316, 16317, 16318, 16319, 16320, 16321, 16322,
  596.     16323, 16324, 16325, 16326, 16327, 16328, 16329, 16330,
  597.     16331, 16332, 16333, 16334, 16335, 16336, 16337, 16338,
  598.     32678, 32679, 32680, 32681, 32682, 32683, 32684, 32685,
  599.     32686, 32687, 32688, 32689, 32690, 32691, 32692, 32693,
  600.     32694, 32695, 32696, 32697, 32698, 32699, 32700, 32701,
  601.     32702, 32703, 32704, 32705, 32706, 32707, 32708, 32709,
  602.     32710, 32711, 32712, 65426, 65427, 65428, 65429, 65430,
  603.     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
  604.     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
  605.     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
  606.     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
  607.     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
  608.     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
  609.     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
  610.     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
  611.     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
  612.     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
  613.     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
  614.     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
  615.     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
  616.     65535
  617. };
  618. static const uint8_t dnxhd_1250_ac_bits[257] = {
  619.      2,  2,  3,  4,  4,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,
  620.      8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10,
  621.     10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
  622.     11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
  623.     12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  624.     13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  625.     14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  626.     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  627.     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  628.     15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  629.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  630.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  631.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  632.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  633.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  634.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  635.     16
  636. };
  637. static const uint8_t dnxhd_1250_ac_level[257] = {
  638.       3,  3,  5,  7,  0,  9, 11,  5, 13, 15, 17,  7, 19, 21, 23,  9,
  639.      25, 27, 29, 31, 33, 11, 35, 37, 39, 41, 43, 45, 13, 47, 49, 51,
  640.      53, 55, 57, 59, 15, 17, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79,
  641.      19, 21, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99,101,103,105, 23,
  642.      25, 27,107,109,111,113,115,117,119,121,123,125,127,129,  3,  5,
  643.       7,  9, 11, 29, 31, 33, 35, 13, 15, 17, 19, 21, 23, 25, 27, 29,
  644.      31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 37, 39, 41, 43,
  645.      55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85,
  646.      87, 89, 91, 93, 95, 97, 99,101,103,105,107,111,113, 45, 47, 49,
  647.      51, 53, 55,109,115,117,119,121,123,125,127,129, 57, 59, 61, 63,
  648.      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
  649.      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
  650.     129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
  651.      33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,
  652.      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
  653.      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
  654.     129
  655. };
  656. static const uint8_t dnxhd_1250_ac_flags[257] = {
  657.     0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2,
  658.     0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
  659.     0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  660.     2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
  661.     2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
  662.     1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  663.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
  664.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  665.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
  666.     2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
  667.     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  668.     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  669.     2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  670.     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  671.     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  672.     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  673.     3,
  674. };
  675.  
  676. static const uint16_t dnxhd_1251_ac_codes[257] = {
  677.         0,     1,     4,    10,    11,    24,    25,    26,
  678.        54,    55,    56,    57,   116,   117,   118,   119,
  679.       240,   241,   242,   243,   244,   245,   492,   493,
  680.       494,   495,   496,   497,   996,   997,   998,   999,
  681.      1000,  1001,  1002,  1003,  1004,  1005,  2012,  2013,
  682.      2014,  2015,  2016,  2017,  2018,  2019,  2020,  2021,
  683.      2022,  2023,  2024,  2025,  4052,  4053,  4054,  4055,
  684.      4056,  4057,  4058,  4059,  4060,  4061,  4062,  4063,
  685.      4064,  4065,  4066,  8134,  8135,  8136,  8137,  8138,
  686.      8139,  8140,  8141,  8142,  8143,  8144,  8145,  8146,
  687.      8147,  8148,  8149,  8150,  8151,  8152,  8153,  8154,
  688.      8155,  8156, 16314, 16315, 16316, 16317, 16318, 16319,
  689.     16320, 16321, 16322, 16323, 16324, 16325, 16326, 16327,
  690.     16328, 16329, 16330, 16331, 16332, 16333, 16334, 16335,
  691.     16336, 16337, 16338, 16339, 32680, 32681, 32682, 32683,
  692.     32684, 32685, 32686, 32687, 32688, 32689, 32690, 32691,
  693.     32692, 32693, 32694, 32695, 32696, 32697, 32698, 32699,
  694.     32700, 32701, 32702, 32703, 32704, 32705, 32706, 32707,
  695.     32708, 32709, 32710, 32711, 32712, 32713, 32714, 65430,
  696.     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
  697.     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
  698.     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
  699.     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
  700.     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
  701.     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
  702.     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
  703.     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
  704.     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
  705.     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
  706.     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
  707.     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
  708.     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
  709.     65535,
  710. };
  711.  
  712. static const uint8_t dnxhd_1251_ac_bits[257] = {
  713.      2,  2,  3,  4,  4,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,
  714.      8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10,
  715.     10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
  716.     11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
  717.     12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  718.     13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14,
  719.     14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  720.     14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  721.     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
  722.     15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  723.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  724.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  725.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  726.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  727.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  728.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  729.     16,
  730. };
  731.  
  732. static const uint8_t dnxhd_1251_ac_level[257] = {
  733.       3,  3,  5,  7,  0,  9, 11,  5, 13, 15, 17,  7, 19, 21, 23,  9,
  734.      25, 27, 29, 31, 33, 11, 35, 37, 39, 41, 43, 13, 45, 47, 49, 51,
  735.      53, 55, 57, 59, 15, 17, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79,
  736.      81, 19, 21, 23, 83, 85, 87, 89, 91, 93, 95, 97, 99,101,103,105,
  737.      25, 27, 29,107,109,111,113,115,117,119,121,123,125,127,129,  3,
  738.       5,  7,  9, 11, 13, 15, 17, 31, 33, 35, 19, 21, 23, 25, 27, 29,
  739.      31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 37,
  740.      39, 41, 43, 45, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83,
  741.      85, 87, 89, 91, 93, 95, 97, 99,101,103,105,107,109,111,113,115,
  742.     117, 47, 49, 51, 53, 55, 57,119,121,123,125,127,129, 59, 61, 63,
  743.      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
  744.      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
  745.     129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
  746.      33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,
  747.      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
  748.      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
  749.     129,
  750. };
  751.  
  752. static const uint8_t dnxhd_1251_ac_flags[257] = {
  753.     0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2,
  754.     0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
  755.     0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  756.     0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  757.     2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
  758.     1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1,
  759.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
  760.     2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  761.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  762.     1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2,
  763.     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  764.     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  765.     2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  766.     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  767.     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  768.     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  769.     3,
  770. };
  771.  
  772. /* Used in CID 1252, 1258 */
  773. static const uint16_t dnxhd_1252_ac_codes[257] = {
  774.         0,     1,     4,    10,    11,    12,    26,    27,
  775.        56,    57,    58,   118,   119,   120,   242,   243,
  776.       244,   245,   246,   247,   496,   497,   498,   499,
  777.       500,  1002,  1003,  1004,  1005,  1006,  1007,  1008,
  778.      1009,  2020,  2021,  2022,  2023,  2024,  2025,  2026,
  779.      2027,  2028,  2029,  4060,  4061,  4062,  4063,  4064,
  780.      4065,  4066,  4067,  4068,  4069,  4070,  4071,  8144,
  781.      8145,  8146,  8147,  8148,  8149,  8150,  8151,  8152,
  782.      8153,  8154,  8155,  8156,  8157,  8158, 16318, 16319,
  783.     16320, 16321, 16322, 16323, 16324, 16325, 16326, 16327,
  784.     16328, 16329, 16330, 16331, 16332, 16333, 16334, 16335,
  785.     32672, 32673, 32674, 32675, 32676, 32677, 32678, 32679,
  786.     32680, 32681, 32682, 32683, 32684, 32685, 32686, 32687,
  787.     32688, 32689, 32690, 32691, 32692, 32693, 32694, 65390,
  788.     65391, 65392, 65393, 65394, 65395, 65396, 65397, 65398,
  789.     65399, 65400, 65401, 65402, 65403, 65404, 65405, 65406,
  790.     65407, 65408, 65409, 65410, 65411, 65412, 65413, 65414,
  791.     65415, 65416, 65417, 65418, 65419, 65420, 65421, 65422,
  792.     65423, 65424, 65425, 65426, 65427, 65428, 65429, 65430,
  793.     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
  794.     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
  795.     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
  796.     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
  797.     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
  798.     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
  799.     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
  800.     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
  801.     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
  802.     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
  803.     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
  804.     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
  805.     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
  806.     65535,
  807. };
  808.  
  809. /* Used in CID 1252, 1258 */
  810. static const uint8_t dnxhd_1252_ac_bits[257] = {
  811.      2,  2,  3,  4,  4,  4,  5,  5,  6,  6,  6,  7,  7,  7,  8,  8,
  812.      8,  8,  8,  8,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 10,
  813.     10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12,
  814.     12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13,
  815.     13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
  816.     14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15,
  817.     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16,
  818.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  819.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  820.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  821.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  822.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  823.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  824.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  825.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  826.     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  827.     16,
  828. };
  829.  
  830. /* Used in CID 1252, 1258 */
  831. static const uint8_t dnxhd_1252_ac_level[257] = {
  832.       3,  3,  5,  7,  5,  0,  9, 11, 13, 15,  7, 17, 19, 21, 23, 25,
  833.      27, 29,  9, 11, 31, 33, 35, 37, 13, 39, 41, 43, 45, 47, 49, 15,
  834.      17, 51, 53, 55, 57, 59, 61, 63, 65, 19, 21, 67, 69, 71, 73, 75,
  835.      77, 79, 81, 83, 23, 25, 27, 85, 87, 89, 91, 93, 95, 97, 99,101,
  836.     103,105,107, 29, 31, 33,109,111,113,115,117,119,121,123,125,127,
  837.     129,  3,  5,  7, 35, 37, 39, 41,  9, 11, 13, 15, 17, 19, 21, 23,
  838.      25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 43, 45, 47, 49, 51, 45,
  839.      47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
  840.      79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99,101,103,105,107,109,
  841.     111,113,115,117,119,121,123,125,127,129, 53, 55, 57, 59, 61, 63,
  842.      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
  843.      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
  844.     129,  3,  5,  7,  9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31,
  845.      33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63,
  846.      65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95,
  847.      97, 99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,
  848.     129,
  849. };
  850.  
  851. static const uint8_t dnxhd_1252_ac_flags[257] = {
  852.     0, 2, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,
  853.     0, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2,
  854.     2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0,
  855.     0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  856.     0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  857.     0, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
  858.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1,
  859.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  860.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  861.     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
  862.     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  863.     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  864.     2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  865.     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  866.     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  867.     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  868.     3,
  869. };
  870.  
  871. /* Used in CID 1235, 1238, 1241, 1256 */
  872. static const uint16_t dnxhd_1235_run_codes[62] = {
  873.        0,    4,   10,   11,   24,   25,   26,   27,
  874.       56,   57,   58,   59,  120,  242,  486,  487,
  875.      488,  489,  980,  981,  982,  983,  984,  985,
  876.      986,  987,  988,  989,  990,  991,  992,  993,
  877.      994,  995,  996,  997,  998,  999, 1000, 1001,
  878.     1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
  879.     1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017,
  880.     1018, 1019, 1020, 1021, 1022, 1023,
  881. };
  882.  
  883. /* Used in CID 1235, 1238, 1241, 1243, 1256 */
  884. static const uint8_t dnxhd_1235_run_bits[62] = {
  885.      1,  3,  4,  4,  5,  5,  5,  5,  6,  6,  6,  6,  7,  8,  9,  9,
  886.      9,  9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
  887.     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
  888.     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
  889. };
  890.  
  891. /* Used in CID 1235, 1241, 1256 */
  892. static const uint8_t dnxhd_1235_run[62] = {
  893.      1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
  894.     18, 20, 17, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
  895.     33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
  896.     49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
  897. };
  898.  
  899. /* Used in CID 1237, 1242, 1253, 1259, 1260 */
  900. static const uint16_t dnxhd_1237_run_codes[62] = {
  901.        0,    4,   10,   11,   24,   25,   26,   54,
  902.       55,   56,   57,   58,  118,  119,  240,  482,
  903.      483,  484,  485,  486,  487,  488,  489,  490,
  904.      491,  492,  493,  494,  990,  991,  992,  993,
  905.      994,  995,  996,  997,  998,  999, 1000, 1001,
  906.     1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
  907.     1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017,
  908.     1018, 1019, 1020, 1021, 1022, 1023,
  909. };
  910.  
  911. /* Used in CID 1237, 1242, 1253, 1259, 1260 */
  912. static const uint8_t dnxhd_1237_run_bits[62] = {
  913.      1,  3,  4,  4,  5,  5,  5,  6,  6,  6,  6,  6,  7,  7,  8,  9,
  914.      9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10,
  915.     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
  916.     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
  917. };
  918.  
  919. /* Used in CID 1237, 1242, 1253, 1259, 1260 */
  920. static const uint8_t dnxhd_1237_run[62] = {
  921.      1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
  922.     17, 18, 19, 20, 21, 53, 57, 58, 59, 60, 61, 62, 22, 23, 24, 25,
  923.     26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
  924.     42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 54, 55, 56,
  925. };
  926.  
  927. static const uint8_t dnxhd_1238_run[62] = {
  928.      1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
  929.     20, 21, 17, 18, 19, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
  930.     33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
  931.     49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
  932. };
  933.  
  934. /* Used in CID 1250, 1251, 1252, 1258 */
  935. static const uint16_t dnxhd_1250_run_codes[62] = {
  936.        0,    4,    5,   12,   26,   27,   28,   58,
  937.      118,  119,  120,  242,  486,  487,  976,  977,
  938.      978,  979,  980,  981,  982,  983,  984,  985,
  939.      986,  987,  988,  989,  990,  991,  992,  993,
  940.      994,  995,  996,  997,  998,  999, 1000, 1001,
  941.     1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
  942.     1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017,
  943.     1018, 1019, 1020, 1021, 1022, 1023,
  944. };
  945.  
  946. /* Used in CID 1250, 1251, 1252, 1258 */
  947. static const uint8_t dnxhd_1250_run_bits[62] = {
  948.      1,  3,  3,  4,  5,  5,  5,  6,  7,  7,  7,  8,  9,  9, 10, 10,
  949.     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
  950.     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
  951.     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
  952. };
  953.  
  954. /* Used in CID 1250, 1251, 1252, 1258 */
  955. static const uint8_t dnxhd_1250_run[62] = {
  956.      1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
  957.     17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
  958.     33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
  959.     49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
  960. };
  961.  
  962. const CIDEntry ff_dnxhd_cid_table[] = {
  963.     { 1235, 1920, 1080, 0, 917504, 917504, 6, 10, 4,
  964.       dnxhd_1235_luma_weight, dnxhd_1235_chroma_weight,
  965.       dnxhd_1235_dc_codes, dnxhd_1235_dc_bits,
  966.       dnxhd_1235_ac_codes, dnxhd_1235_ac_bits, dnxhd_1235_ac_level,
  967.       dnxhd_1235_ac_flags,
  968.       dnxhd_1235_run_codes, dnxhd_1235_run_bits, dnxhd_1235_run,
  969.       { 175, 185, 365, 440 },
  970.       { { 24000, 1001 }, { 25, 1 }, { 50, 1 }, { 60000, 1001 } } },
  971.     { 1237, 1920, 1080, 0, 606208, 606208, 4, 8, 3,
  972.       dnxhd_1237_luma_weight, dnxhd_1237_chroma_weight,
  973.       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
  974.       dnxhd_1237_ac_codes, dnxhd_1237_ac_bits, dnxhd_1237_ac_level,
  975.       dnxhd_1237_ac_flags,
  976.       dnxhd_1237_run_codes, dnxhd_1237_run_bits, dnxhd_1237_run,
  977.       { 115, 120, 145, 240, 290 },
  978.       { { 24000, 1001 }, { 25, 1 }, { 30000, 1001 }, { 50, 1 }, { 60000, 1001 } } },
  979.     { 1238, 1920, 1080, 0, 917504, 917504, 4, 8, 4,
  980.       dnxhd_1238_luma_weight, dnxhd_1238_chroma_weight,
  981.       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
  982.       dnxhd_1238_ac_codes, dnxhd_1238_ac_bits, dnxhd_1238_ac_level,
  983.       dnxhd_1238_ac_flags,
  984.       dnxhd_1235_run_codes, dnxhd_1235_run_bits, dnxhd_1238_run,
  985.       { 175, 185, 220, 365, 440 },
  986.       { { 24000, 1001 }, { 25, 1 }, { 30000, 1001 }, { 50, 1 }, { 60000, 1001 } } },
  987.     { 1241, 1920, 1080, 1, 917504, 458752, 6, 10, 4,
  988.       dnxhd_1241_luma_weight, dnxhd_1241_chroma_weight,
  989.       dnxhd_1235_dc_codes, dnxhd_1235_dc_bits,
  990.       dnxhd_1235_ac_codes, dnxhd_1235_ac_bits, dnxhd_1235_ac_level,
  991.       dnxhd_1235_ac_flags,
  992.       dnxhd_1235_run_codes, dnxhd_1235_run_bits, dnxhd_1235_run,
  993.       { 185, 220 },
  994.       { { 25, 1 }, { 30000, 1001 } } },
  995.     { 1242, 1920, 1080, 1, 606208, 303104, 4, 8, 3,
  996.       dnxhd_1242_luma_weight, dnxhd_1242_chroma_weight,
  997.       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
  998.       dnxhd_1237_ac_codes, dnxhd_1237_ac_bits, dnxhd_1237_ac_level,
  999.       dnxhd_1237_ac_flags,
  1000.       dnxhd_1237_run_codes, dnxhd_1237_run_bits, dnxhd_1237_run,
  1001.       { 120, 145 },
  1002.       { { 25, 1 }, { 30000, 1001 } } },
  1003.     { 1243, 1920, 1080, 1, 917504, 458752, 4, 8, 4,
  1004.       dnxhd_1243_luma_weight, dnxhd_1243_chroma_weight,
  1005.       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
  1006.       dnxhd_1238_ac_codes, dnxhd_1238_ac_bits, dnxhd_1238_ac_level,
  1007.       dnxhd_1238_ac_flags,
  1008.       dnxhd_1235_run_codes, dnxhd_1235_run_bits, dnxhd_1238_run,
  1009.       { 185, 220 },
  1010.       { { 25, 1 }, { 30000, 1001 } } },
  1011.     { 1250, 1280,  720, 0, 458752, 458752, 6, 10, 4,
  1012.       dnxhd_1250_luma_weight, dnxhd_1250_chroma_weight,
  1013.       dnxhd_1235_dc_codes, dnxhd_1235_dc_bits,
  1014.       dnxhd_1250_ac_codes, dnxhd_1250_ac_bits, dnxhd_1250_ac_level,
  1015.       dnxhd_1250_ac_flags,
  1016.       dnxhd_1250_run_codes, dnxhd_1250_run_bits, dnxhd_1250_run,
  1017.       { 90, 90, 180, 220 },
  1018.       { { 24000, 1001 }, { 25, 1 }, { 50, 1 }, { 60000, 1001 } } },
  1019.     { 1251, 1280,  720, 0, 458752, 458752, 4, 8, 4,
  1020.       dnxhd_1251_luma_weight, dnxhd_1251_chroma_weight,
  1021.       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
  1022.       dnxhd_1251_ac_codes, dnxhd_1251_ac_bits, dnxhd_1251_ac_level,
  1023.       dnxhd_1251_ac_flags,
  1024.       dnxhd_1250_run_codes, dnxhd_1250_run_bits, dnxhd_1250_run,
  1025.       { 90, 90, 110, 180, 220 },
  1026.       { { 24000, 1001 }, { 25, 1 }, { 30000, 1001 }, { 50, 1 }, { 60000, 1001 } } },
  1027.     { 1252, 1280,  720, 0, 303104, 303104, 4, 8, 5,
  1028.       dnxhd_1252_luma_weight, dnxhd_1252_chroma_weight,
  1029.       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
  1030.       dnxhd_1252_ac_codes, dnxhd_1252_ac_bits, dnxhd_1252_ac_level,
  1031.       dnxhd_1252_ac_flags,
  1032.       dnxhd_1250_run_codes, dnxhd_1250_run_bits, dnxhd_1250_run,
  1033.       { 60, 60, 75, 120, 145 },
  1034.       { { 24000, 1001 }, { 25, 1 }, { 30000, 1001 }, { 50, 1 }, { 60000, 1001 } } },
  1035.     { 1253, 1920, 1080, 0, 188416, 188416, 4, 8, 3,
  1036.       dnxhd_1237_luma_weight, dnxhd_1237_chroma_weight,
  1037.       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
  1038.       dnxhd_1237_ac_codes, dnxhd_1237_ac_bits, dnxhd_1237_ac_level,
  1039.       dnxhd_1237_ac_flags,
  1040.       dnxhd_1237_run_codes, dnxhd_1237_run_bits, dnxhd_1237_run,
  1041.       { 36, 36, 45, 75, 90 },
  1042.       { { 24000, 1001 }, { 25, 1 }, { 30000, 1001 }, { 50, 1 }, { 60000, 1001 } } },
  1043.     { 1256, 1920, 1080, 0, 1835008, 1835008, 6, 10, 4,
  1044.       dnxhd_1235_luma_weight, dnxhd_1256_chroma_weight,
  1045.       dnxhd_1235_dc_codes, dnxhd_1235_dc_bits,
  1046.       dnxhd_1235_ac_codes, dnxhd_1235_ac_bits, dnxhd_1235_ac_level,
  1047.       dnxhd_1235_ac_flags,
  1048.       dnxhd_1235_run_codes, dnxhd_1235_run_bits, dnxhd_1235_run,
  1049.       { 350, 390, 440, 730, 880 },
  1050.       { { 24000, 1001 }, { 25, 1 }, { 30000, 1001 }, { 50, 1 }, { 60000, 1001 } } },
  1051.     { 1258, 960, 720, 0, 212992, 212992, 4, 8, 5,
  1052.       dnxhd_1252_luma_weight, dnxhd_1252_chroma_weight,
  1053.       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
  1054.       dnxhd_1252_ac_codes, dnxhd_1252_ac_bits, dnxhd_1252_ac_level,
  1055.       dnxhd_1252_ac_flags,
  1056.       dnxhd_1250_run_codes, dnxhd_1250_run_bits, dnxhd_1250_run,
  1057.       { 42, 60, 75, 115 } },
  1058.     { 1259, 1440, 1080, 0, 417792, 417792, 4, 8, 3,
  1059.       dnxhd_1237_luma_weight, dnxhd_1237_chroma_weight,
  1060.       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
  1061.       dnxhd_1237_ac_codes, dnxhd_1237_ac_bits, dnxhd_1237_ac_level,
  1062.       dnxhd_1237_ac_flags,
  1063.       dnxhd_1237_run_codes, dnxhd_1237_run_bits, dnxhd_1237_run,
  1064.       { 63, 84, 100, 110 } },
  1065.     { 1260, 1440, 1080, 1, 835584, 417792, 4, 8, 3,
  1066.       dnxhd_1260_luma_weight, dnxhd_1260_chroma_weight,
  1067.       dnxhd_1237_dc_codes, dnxhd_1237_dc_bits,
  1068.       dnxhd_1237_ac_codes, dnxhd_1237_ac_bits, dnxhd_1237_ac_level,
  1069.       dnxhd_1237_ac_flags,
  1070.       dnxhd_1237_run_codes, dnxhd_1237_run_bits, dnxhd_1237_run,
  1071.       { 80, 90, 100, 110 } },
  1072. };
  1073.  
  1074. int ff_dnxhd_get_cid_table(int cid)
  1075. {
  1076.     int i;
  1077.     for (i = 0; i < FF_ARRAY_ELEMS(ff_dnxhd_cid_table); i++)
  1078.         if (ff_dnxhd_cid_table[i].cid == cid)
  1079.             return i;
  1080.     return -1;
  1081. }
  1082.  
  1083. int avpriv_dnxhd_get_frame_size(int cid)
  1084. {
  1085.     int i = ff_dnxhd_get_cid_table(cid);
  1086.     if (i<0)
  1087.         return i;
  1088.     return ff_dnxhd_cid_table[i].frame_size;
  1089. }
  1090.  
  1091. int avpriv_dnxhd_get_interlaced(int cid)
  1092. {
  1093.     int i = ff_dnxhd_get_cid_table(cid);
  1094.     if (i < 0)
  1095.         return i;
  1096.     return ff_dnxhd_cid_table[i].interlaced;
  1097. }
  1098.  
  1099. int ff_dnxhd_find_cid(AVCodecContext *avctx, int bit_depth)
  1100. {
  1101.     int i, j;
  1102.     int mbs = avctx->bit_rate / 1000000;
  1103.     if (!mbs)
  1104.         return 0;
  1105.     for (i = 0; i < FF_ARRAY_ELEMS(ff_dnxhd_cid_table); i++) {
  1106.         const CIDEntry *cid = &ff_dnxhd_cid_table[i];
  1107.         if (cid->width == avctx->width && cid->height == avctx->height &&
  1108.             cid->interlaced == !!(avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT) &&
  1109.             cid->bit_depth == bit_depth) {
  1110.             for (j = 0; j < FF_ARRAY_ELEMS(cid->bit_rates); j++) {
  1111.                 if (cid->bit_rates[j] == mbs)
  1112.                     return cid->cid;
  1113.             }
  1114.         }
  1115.     }
  1116.     return 0;
  1117. }
  1118.  
  1119. void ff_dnxhd_print_profiles(AVCodecContext *avctx, int loglevel)
  1120. {
  1121.     int i, j;
  1122.     for (i = 0; i < FF_ARRAY_ELEMS(ff_dnxhd_cid_table); i++) {
  1123.         const CIDEntry *cid = &ff_dnxhd_cid_table[i];
  1124.         for (j = 0; j < FF_ARRAY_ELEMS(cid->bit_rates); j++) {
  1125.             if (!cid->bit_rates[j])
  1126.                 break;
  1127.  
  1128.             av_log(avctx, loglevel, "Frame size: %dx%d%c; bitrate: %dMbps; pixel format: %s; framerate: %d/%d\n",
  1129.                    cid->width, cid->height, cid->interlaced ? 'i' : 'p', cid->bit_rates[j],
  1130.                    cid->bit_depth == 10 ? "yuv422p10" : "yuv422p", cid->frame_rates[j].num, cid->frame_rates[j].den);
  1131.         }
  1132.     }
  1133. }
  1134.