Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * H.26L/H.264/AVC/JVT/14496-10/... cabac decoding
  3.  * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
  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.  * H.264 / AVC / MPEG4 part10 cabac decoding.
  25.  * @author Michael Niedermayer <michaelni@gmx.at>
  26.  */
  27.  
  28. #define CABAC(h) 1
  29. #define UNCHECKED_BITSTREAM_READER 1
  30. #define INT_BIT (CHAR_BIT * sizeof(int))
  31.  
  32. #include "libavutil/attributes.h"
  33. #include "libavutil/avassert.h"
  34. #include "libavutil/timer.h"
  35. #include "config.h"
  36. #include "cabac.h"
  37. #include "cabac_functions.h"
  38. #include "internal.h"
  39. #include "avcodec.h"
  40. #include "h264.h"
  41. #include "h264data.h"
  42. #include "h264_mvpred.h"
  43. #include "golomb.h"
  44. #include "mpegutils.h"
  45.  
  46. #if ARCH_X86
  47. #include "x86/h264_i386.h"
  48. #endif
  49.  
  50. /* Cabac pre state table */
  51.  
  52. static const int8_t cabac_context_init_I[1024][2] =
  53. {
  54.     /* 0 - 10 */
  55.     { 20, -15 }, {  2, 54 },  {  3,  74 }, { 20, -15 },
  56.     {  2,  54 }, {  3, 74 },  { -28,127 }, { -23, 104 },
  57.     { -6,  53 }, { -1, 54 },  {  7,  51 },
  58.  
  59.     /* 11 - 23 unsused for I */
  60.     { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
  61.     { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
  62.     { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
  63.     { 0, 0 },
  64.  
  65.     /* 24- 39 */
  66.     { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
  67.     { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
  68.     { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
  69.     { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
  70.  
  71.     /* 40 - 53 */
  72.     { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
  73.     { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
  74.     { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
  75.     { 0, 0 },    { 0, 0 },
  76.  
  77.     /* 54 - 59 */
  78.     { 0, 0 },    { 0, 0 },    { 0, 0 },      { 0, 0 },
  79.     { 0, 0 },    { 0, 0 },
  80.  
  81.     /* 60 - 69 */
  82.     { 0, 41 },   { 0, 63 },   { 0, 63 },     { 0, 63 },
  83.     { -9, 83 },  { 4, 86 },   { 0, 97 },     { -7, 72 },
  84.     { 13, 41 },  { 3, 62 },
  85.  
  86.     /* 70 -> 87 */
  87.     { 0, 11 },   { 1, 55 },   { 0, 69 },     { -17, 127 },
  88.     { -13, 102 },{ 0, 82 },   { -7, 74 },    { -21, 107 },
  89.     { -27, 127 },{ -31, 127 },{ -24, 127 },  { -18, 95 },
  90.     { -27, 127 },{ -21, 114 },{ -30, 127 },  { -17, 123 },
  91.     { -12, 115 },{ -16, 122 },
  92.  
  93.     /* 88 -> 104 */
  94.     { -11, 115 },{ -12, 63 }, { -2, 68 },    { -15, 84 },
  95.     { -13, 104 },{ -3, 70 },  { -8, 93 },    { -10, 90 },
  96.     { -30, 127 },{ -1, 74 },  { -6, 97 },    { -7, 91 },
  97.     { -20, 127 },{ -4, 56 },  { -5, 82 },    { -7, 76 },
  98.     { -22, 125 },
  99.  
  100.     /* 105 -> 135 */
  101.     { -7, 93 },  { -11, 87 }, { -3, 77 },    { -5, 71 },
  102.     { -4, 63 },  { -4, 68 },  { -12, 84 },   { -7, 62 },
  103.     { -7, 65 },  { 8, 61 },   { 5, 56 },     { -2, 66 },
  104.     { 1, 64 },   { 0, 61 },   { -2, 78 },    { 1, 50 },
  105.     { 7, 52 },   { 10, 35 },  { 0, 44 },     { 11, 38 },
  106.     { 1, 45 },   { 0, 46 },   { 5, 44 },     { 31, 17 },
  107.     { 1, 51 },   { 7, 50 },   { 28, 19 },    { 16, 33 },
  108.     { 14, 62 },  { -13, 108 },{ -15, 100 },
  109.  
  110.     /* 136 -> 165 */
  111.     { -13, 101 },{ -13, 91 }, { -12, 94 },   { -10, 88 },
  112.     { -16, 84 }, { -10, 86 }, { -7, 83 },    { -13, 87 },
  113.     { -19, 94 }, { 1, 70 },   { 0, 72 },     { -5, 74 },
  114.     { 18, 59 },  { -8, 102 }, { -15, 100 },  { 0, 95 },
  115.     { -4, 75 },  { 2, 72 },   { -11, 75 },   { -3, 71 },
  116.     { 15, 46 },  { -13, 69 }, { 0, 62 },     { 0, 65 },
  117.     { 21, 37 },  { -15, 72 }, { 9, 57 },     { 16, 54 },
  118.     { 0, 62 },   { 12, 72 },
  119.  
  120.     /* 166 -> 196 */
  121.     { 24, 0 },   { 15, 9 },   { 8, 25 },     { 13, 18 },
  122.     { 15, 9 },   { 13, 19 },  { 10, 37 },    { 12, 18 },
  123.     { 6, 29 },   { 20, 33 },  { 15, 30 },    { 4, 45 },
  124.     { 1, 58 },   { 0, 62 },   { 7, 61 },     { 12, 38 },
  125.     { 11, 45 },  { 15, 39 },  { 11, 42 },    { 13, 44 },
  126.     { 16, 45 },  { 12, 41 },  { 10, 49 },    { 30, 34 },
  127.     { 18, 42 },  { 10, 55 },  { 17, 51 },    { 17, 46 },
  128.     { 0, 89 },   { 26, -19 }, { 22, -17 },
  129.  
  130.     /* 197 -> 226 */
  131.     { 26, -17 }, { 30, -25 }, { 28, -20 },   { 33, -23 },
  132.     { 37, -27 }, { 33, -23 }, { 40, -28 },   { 38, -17 },
  133.     { 33, -11 }, { 40, -15 }, { 41, -6 },    { 38, 1 },
  134.     { 41, 17 },  { 30, -6 },  { 27, 3 },     { 26, 22 },
  135.     { 37, -16 }, { 35, -4 },  { 38, -8 },    { 38, -3 },
  136.     { 37, 3 },   { 38, 5 },   { 42, 0 },     { 35, 16 },
  137.     { 39, 22 },  { 14, 48 },  { 27, 37 },    { 21, 60 },
  138.     { 12, 68 },  { 2, 97 },
  139.  
  140.     /* 227 -> 251 */
  141.     { -3, 71 },  { -6, 42 },  { -5, 50 },    { -3, 54 },
  142.     { -2, 62 },  { 0, 58 },   { 1, 63 },     { -2, 72 },
  143.     { -1, 74 },  { -9, 91 },  { -5, 67 },    { -5, 27 },
  144.     { -3, 39 },  { -2, 44 },  { 0, 46 },     { -16, 64 },
  145.     { -8, 68 },  { -10, 78 }, { -6, 77 },    { -10, 86 },
  146.     { -12, 92 }, { -15, 55 }, { -10, 60 },   { -6, 62 },
  147.     { -4, 65 },
  148.  
  149.     /* 252 -> 275 */
  150.     { -12, 73 }, { -8, 76 },  { -7, 80 },    { -9, 88 },
  151.     { -17, 110 },{ -11, 97 }, { -20, 84 },   { -11, 79 },
  152.     { -6, 73 },  { -4, 74 },  { -13, 86 },   { -13, 96 },
  153.     { -11, 97 }, { -19, 117 },{ -8, 78 },    { -5, 33 },
  154.     { -4, 48 },  { -2, 53 },  { -3, 62 },    { -13, 71 },
  155.     { -10, 79 }, { -12, 86 }, { -13, 90 },   { -14, 97 },
  156.  
  157.     /* 276 a bit special (not used, bypass is used instead) */
  158.     { 0, 0 },
  159.  
  160.     /* 277 -> 307 */
  161.     { -6, 93 },  { -6, 84 },  { -8, 79 },    { 0, 66 },
  162.     { -1, 71 },  { 0, 62 },   { -2, 60 },    { -2, 59 },
  163.     { -5, 75 },  { -3, 62 },  { -4, 58 },    { -9, 66 },
  164.     { -1, 79 },  { 0, 71 },   { 3, 68 },     { 10, 44 },
  165.     { -7, 62 },  { 15, 36 },  { 14, 40 },    { 16, 27 },
  166.     { 12, 29 },  { 1, 44 },   { 20, 36 },    { 18, 32 },
  167.     { 5, 42 },   { 1, 48 },   { 10, 62 },    { 17, 46 },
  168.     { 9, 64 },   { -12, 104 },{ -11, 97 },
  169.  
  170.     /* 308 -> 337 */
  171.     { -16, 96 }, { -7, 88 },  { -8, 85 },    { -7, 85 },
  172.     { -9, 85 },  { -13, 88 }, { 4, 66 },     { -3, 77 },
  173.     { -3, 76 },  { -6, 76 },  { 10, 58 },    { -1, 76 },
  174.     { -1, 83 },  { -7, 99 },  { -14, 95 },   { 2, 95 },
  175.     { 0, 76 },   { -5, 74 },  { 0, 70 },     { -11, 75 },
  176.     { 1, 68 },   { 0, 65 },   { -14, 73 },   { 3, 62 },
  177.     { 4, 62 },   { -1, 68 },  { -13, 75 },   { 11, 55 },
  178.     { 5, 64 },   { 12, 70 },
  179.  
  180.     /* 338 -> 368 */
  181.     { 15, 6 },   { 6, 19 },   { 7, 16 },     { 12, 14 },
  182.     { 18, 13 },  { 13, 11 },  { 13, 15 },    { 15, 16 },
  183.     { 12, 23 },  { 13, 23 },  { 15, 20 },    { 14, 26 },
  184.     { 14, 44 },  { 17, 40 },  { 17, 47 },    { 24, 17 },
  185.     { 21, 21 },  { 25, 22 },  { 31, 27 },    { 22, 29 },
  186.     { 19, 35 },  { 14, 50 },  { 10, 57 },    { 7, 63 },
  187.     { -2, 77 },  { -4, 82 },  { -3, 94 },    { 9, 69 },
  188.     { -12, 109 },{ 36, -35 }, { 36, -34 },
  189.  
  190.     /* 369 -> 398 */
  191.     { 32, -26 }, { 37, -30 }, { 44, -32 },   { 34, -18 },
  192.     { 34, -15 }, { 40, -15 }, { 33, -7 },    { 35, -5 },
  193.     { 33, 0 },   { 38, 2 },   { 33, 13 },    { 23, 35 },
  194.     { 13, 58 },  { 29, -3 },  { 26, 0 },     { 22, 30 },
  195.     { 31, -7 },  { 35, -15 }, { 34, -3 },    { 34, 3 },
  196.     { 36, -1 },  { 34, 5 },   { 32, 11 },    { 35, 5 },
  197.     { 34, 12 },  { 39, 11 },  { 30, 29 },    { 34, 26 },
  198.     { 29, 39 },  { 19, 66 },
  199.  
  200.     /* 399 -> 435 */
  201.     {  31,  21 }, {  31,  31 }, {  25,  50 },
  202.     { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11,  85 },
  203.     { -15,  92 }, { -14,  89 }, { -26,  71 }, { -15,  81 },
  204.     { -14,  80 }, {   0,  68 }, { -14,  70 }, { -24,  56 },
  205.     { -23,  68 }, { -24,  50 }, { -11,  74 }, {  23, -13 },
  206.     {  26, -13 }, {  40, -15 }, {  49, -14 }, {  44,   3 },
  207.     {  45,   6 }, {  44,  34 }, {  33,  54 }, {  19,  82 },
  208.     {  -3,  75 }, {  -1,  23 }, {   1,  34 }, {   1,  43 },
  209.     {   0,  54 }, {  -2,  55 }, {   0,  61 }, {   1,  64 },
  210.     {   0,  68 }, {  -9,  92 },
  211.  
  212.     /* 436 -> 459 */
  213.     { -14, 106 }, { -13,  97 }, { -15,  90 }, { -12,  90 },
  214.     { -18,  88 }, { -10,  73 }, {  -9,  79 }, { -14,  86 },
  215.     { -10,  73 }, { -10,  70 }, { -10,  69 }, {  -5,  66 },
  216.     {  -9,  64 }, {  -5,  58 }, {   2,  59 }, {  21, -10 },
  217.     {  24, -11 }, {  28,  -8 }, {  28,  -1 }, {  29,   3 },
  218.     {  29,   9 }, {  35,  20 }, {  29,  36 }, {  14,  67 },
  219.  
  220.     /* 460 -> 1024 */
  221.     { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
  222.     { -12,  63 }, {  -2,  68 }, { -15,  84 }, { -13, 104 },
  223.     {  -3,  70 }, {  -8,  93 }, { -10,  90 }, { -30, 127 },
  224.     { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 },
  225.     { -12,  63 }, {  -2,  68 }, { -15,  84 }, { -13, 104 },
  226.     {  -3,  70 }, {  -8,  93 }, { -10,  90 }, { -30, 127 },
  227.     {  -7,  93 }, { -11,  87 }, {  -3,  77 }, {  -5,  71 },
  228.     {  -4,  63 }, {  -4,  68 }, { -12,  84 }, {  -7,  62 },
  229.     {  -7,  65 }, {   8,  61 }, {   5,  56 }, {  -2,  66 },
  230.     {   1,  64 }, {   0,  61 }, {  -2,  78 }, {   1,  50 },
  231.     {   7,  52 }, {  10,  35 }, {   0,  44 }, {  11,  38 },
  232.     {   1,  45 }, {   0,  46 }, {   5,  44 }, {  31,  17 },
  233.     {   1,  51 }, {   7,  50 }, {  28,  19 }, {  16,  33 },
  234.     {  14,  62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
  235.     { -13,  91 }, { -12,  94 }, { -10,  88 }, { -16,  84 },
  236.     { -10,  86 }, {  -7,  83 }, { -13,  87 }, { -19,  94 },
  237.     {   1,  70 }, {   0,  72 }, {  -5,  74 }, {  18,  59 },
  238.     {  -7,  93 }, { -11,  87 }, {  -3,  77 }, {  -5,  71 },
  239.     {  -4,  63 }, {  -4,  68 }, { -12,  84 }, {  -7,  62 },
  240.     {  -7,  65 }, {   8,  61 }, {   5,  56 }, {  -2,  66 },
  241.     {   1,  64 }, {   0,  61 }, {  -2,  78 }, {   1,  50 },
  242.     {   7,  52 }, {  10,  35 }, {   0,  44 }, {  11,  38 },
  243.     {   1,  45 }, {   0,  46 }, {   5,  44 }, {  31,  17 },
  244.     {   1,  51 }, {   7,  50 }, {  28,  19 }, {  16,  33 },
  245.     {  14,  62 }, { -13, 108 }, { -15, 100 }, { -13, 101 },
  246.     { -13,  91 }, { -12,  94 }, { -10,  88 }, { -16,  84 },
  247.     { -10,  86 }, {  -7,  83 }, { -13,  87 }, { -19,  94 },
  248.     {   1,  70 }, {   0,  72 }, {  -5,  74 }, {  18,  59 },
  249.     {  24,   0 }, {  15,   9 }, {   8,  25 }, {  13,  18 },
  250.     {  15,   9 }, {  13,  19 }, {  10,  37 }, {  12,  18 },
  251.     {   6,  29 }, {  20,  33 }, {  15,  30 }, {   4,  45 },
  252.     {   1,  58 }, {   0,  62 }, {   7,  61 }, {  12,  38 },
  253.     {  11,  45 }, {  15,  39 }, {  11,  42 }, {  13,  44 },
  254.     {  16,  45 }, {  12,  41 }, {  10,  49 }, {  30,  34 },
  255.     {  18,  42 }, {  10,  55 }, {  17,  51 }, {  17,  46 },
  256.     {   0,  89 }, {  26, -19 }, {  22, -17 }, {  26, -17 },
  257.     {  30, -25 }, {  28, -20 }, {  33, -23 }, {  37, -27 },
  258.     {  33, -23 }, {  40, -28 }, {  38, -17 }, {  33, -11 },
  259.     {  40, -15 }, {  41,  -6 }, {  38,   1 }, {  41,  17 },
  260.     {  24,   0 }, {  15,   9 }, {   8,  25 }, {  13,  18 },
  261.     {  15,   9 }, {  13,  19 }, {  10,  37 }, {  12,  18 },
  262.     {   6,  29 }, {  20,  33 }, {  15,  30 }, {   4,  45 },
  263.     {   1,  58 }, {   0,  62 }, {   7,  61 }, {  12,  38 },
  264.     {  11,  45 }, {  15,  39 }, {  11,  42 }, {  13,  44 },
  265.     {  16,  45 }, {  12,  41 }, {  10,  49 }, {  30,  34 },
  266.     {  18,  42 }, {  10,  55 }, {  17,  51 }, {  17,  46 },
  267.     {   0,  89 }, {  26, -19 }, {  22, -17 }, {  26, -17 },
  268.     {  30, -25 }, {  28, -20 }, {  33, -23 }, {  37, -27 },
  269.     {  33, -23 }, {  40, -28 }, {  38, -17 }, {  33, -11 },
  270.     {  40, -15 }, {  41,  -6 }, {  38,   1 }, {  41,  17 },
  271.     { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11,  85 },
  272.     { -15,  92 }, { -14,  89 }, { -26,  71 }, { -15,  81 },
  273.     { -14,  80 }, {   0,  68 }, { -14,  70 }, { -24,  56 },
  274.     { -23,  68 }, { -24,  50 }, { -11,  74 }, { -14, 106 },
  275.     { -13,  97 }, { -15,  90 }, { -12,  90 }, { -18,  88 },
  276.     { -10,  73 }, {  -9,  79 }, { -14,  86 }, { -10,  73 },
  277.     { -10,  70 }, { -10,  69 }, {  -5,  66 }, {  -9,  64 },
  278.     {  -5,  58 }, {   2,  59 }, {  23, -13 }, {  26, -13 },
  279.     {  40, -15 }, {  49, -14 }, {  44,   3 }, {  45,   6 },
  280.     {  44,  34 }, {  33,  54 }, {  19,  82 }, {  21, -10 },
  281.     {  24, -11 }, {  28,  -8 }, {  28,  -1 }, {  29,   3 },
  282.     {  29,   9 }, {  35,  20 }, {  29,  36 }, {  14,  67 },
  283.     {  -3,  75 }, {  -1,  23 }, {   1,  34 }, {   1,  43 },
  284.     {   0,  54 }, {  -2,  55 }, {   0,  61 }, {   1,  64 },
  285.     {   0,  68 }, {  -9,  92 }, { -17, 120 }, { -20, 112 },
  286.     { -18, 114 }, { -11,  85 }, { -15,  92 }, { -14,  89 },
  287.     { -26,  71 }, { -15,  81 }, { -14,  80 }, {   0,  68 },
  288.     { -14,  70 }, { -24,  56 }, { -23,  68 }, { -24,  50 },
  289.     { -11,  74 }, { -14, 106 }, { -13,  97 }, { -15,  90 },
  290.     { -12,  90 }, { -18,  88 }, { -10,  73 }, {  -9,  79 },
  291.     { -14,  86 }, { -10,  73 }, { -10,  70 }, { -10,  69 },
  292.     {  -5,  66 }, {  -9,  64 }, {  -5,  58 }, {   2,  59 },
  293.     {  23, -13 }, {  26, -13 }, {  40, -15 }, {  49, -14 },
  294.     {  44,   3 }, {  45,   6 }, {  44,  34 }, {  33,  54 },
  295.     {  19,  82 }, {  21, -10 }, {  24, -11 }, {  28,  -8 },
  296.     {  28,  -1 }, {  29,   3 }, {  29,   9 }, {  35,  20 },
  297.     {  29,  36 }, {  14,  67 }, {  -3,  75 }, {  -1,  23 },
  298.     {   1,  34 }, {   1,  43 }, {   0,  54 }, {  -2,  55 },
  299.     {   0,  61 }, {   1,  64 }, {   0,  68 }, {  -9,  92 },
  300.     {  -6,  93 }, {  -6,  84 }, {  -8,  79 }, {   0,  66 },
  301.     {  -1,  71 }, {   0,  62 }, {  -2,  60 }, {  -2,  59 },
  302.     {  -5,  75 }, {  -3,  62 }, {  -4,  58 }, {  -9,  66 },
  303.     {  -1,  79 }, {   0,  71 }, {   3,  68 }, {  10,  44 },
  304.     {  -7,  62 }, {  15,  36 }, {  14,  40 }, {  16,  27 },
  305.     {  12,  29 }, {   1,  44 }, {  20,  36 }, {  18,  32 },
  306.     {   5,  42 }, {   1,  48 }, {  10,  62 }, {  17,  46 },
  307.     {   9,  64 }, { -12, 104 }, { -11,  97 }, { -16,  96 },
  308.     {  -7,  88 }, {  -8,  85 }, {  -7,  85 }, {  -9,  85 },
  309.     { -13,  88 }, {   4,  66 }, {  -3,  77 }, {  -3,  76 },
  310.     {  -6,  76 }, {  10,  58 }, {  -1,  76 }, {  -1,  83 },
  311.     {  -6,  93 }, {  -6,  84 }, {  -8,  79 }, {   0,  66 },
  312.     {  -1,  71 }, {   0,  62 }, {  -2,  60 }, {  -2,  59 },
  313.     {  -5,  75 }, {  -3,  62 }, {  -4,  58 }, {  -9,  66 },
  314.     {  -1,  79 }, {   0,  71 }, {   3,  68 }, {  10,  44 },
  315.     {  -7,  62 }, {  15,  36 }, {  14,  40 }, {  16,  27 },
  316.     {  12,  29 }, {   1,  44 }, {  20,  36 }, {  18,  32 },
  317.     {   5,  42 }, {   1,  48 }, {  10,  62 }, {  17,  46 },
  318.     {   9,  64 }, { -12, 104 }, { -11,  97 }, { -16,  96 },
  319.     {  -7,  88 }, {  -8,  85 }, {  -7,  85 }, {  -9,  85 },
  320.     { -13,  88 }, {   4,  66 }, {  -3,  77 }, {  -3,  76 },
  321.     {  -6,  76 }, {  10,  58 }, {  -1,  76 }, {  -1,  83 },
  322.     {  15,   6 }, {   6,  19 }, {   7,  16 }, {  12,  14 },
  323.     {  18,  13 }, {  13,  11 }, {  13,  15 }, {  15,  16 },
  324.     {  12,  23 }, {  13,  23 }, {  15,  20 }, {  14,  26 },
  325.     {  14,  44 }, {  17,  40 }, {  17,  47 }, {  24,  17 },
  326.     {  21,  21 }, {  25,  22 }, {  31,  27 }, {  22,  29 },
  327.     {  19,  35 }, {  14,  50 }, {  10,  57 }, {   7,  63 },
  328.     {  -2,  77 }, {  -4,  82 }, {  -3,  94 }, {   9,  69 },
  329.     { -12, 109 }, {  36, -35 }, {  36, -34 }, {  32, -26 },
  330.     {  37, -30 }, {  44, -32 }, {  34, -18 }, {  34, -15 },
  331.     {  40, -15 }, {  33,  -7 }, {  35,  -5 }, {  33,   0 },
  332.     {  38,   2 }, {  33,  13 }, {  23,  35 }, {  13,  58 },
  333.     {  15,   6 }, {   6,  19 }, {   7,  16 }, {  12,  14 },
  334.     {  18,  13 }, {  13,  11 }, {  13,  15 }, {  15,  16 },
  335.     {  12,  23 }, {  13,  23 }, {  15,  20 }, {  14,  26 },
  336.     {  14,  44 }, {  17,  40 }, {  17,  47 }, {  24,  17 },
  337.     {  21,  21 }, {  25,  22 }, {  31,  27 }, {  22,  29 },
  338.     {  19,  35 }, {  14,  50 }, {  10,  57 }, {   7,  63 },
  339.     {  -2,  77 }, {  -4,  82 }, {  -3,  94 }, {   9,  69 },
  340.     { -12, 109 }, {  36, -35 }, {  36, -34 }, {  32, -26 },
  341.     {  37, -30 }, {  44, -32 }, {  34, -18 }, {  34, -15 },
  342.     {  40, -15 }, {  33,  -7 }, {  35,  -5 }, {  33,   0 },
  343.     {  38,   2 }, {  33,  13 }, {  23,  35 }, {  13,  58 },
  344.     {  -3,  71 }, {  -6,  42 }, {  -5,  50 }, {  -3,  54 },
  345.     {  -2,  62 }, {   0,  58 }, {   1,  63 }, {  -2,  72 },
  346.     {  -1,  74 }, {  -9,  91 }, {  -5,  67 }, {  -5,  27 },
  347.     {  -3,  39 }, {  -2,  44 }, {   0,  46 }, { -16,  64 },
  348.     {  -8,  68 }, { -10,  78 }, {  -6,  77 }, { -10,  86 },
  349.     { -12,  92 }, { -15,  55 }, { -10,  60 }, {  -6,  62 },
  350.     {  -4,  65 }, { -12,  73 }, {  -8,  76 }, {  -7,  80 },
  351.     {  -9,  88 }, { -17, 110 }, {  -3,  71 }, {  -6,  42 },
  352.     {  -5,  50 }, {  -3,  54 }, {  -2,  62 }, {   0,  58 },
  353.     {   1,  63 }, {  -2,  72 }, {  -1,  74 }, {  -9,  91 },
  354.     {  -5,  67 }, {  -5,  27 }, {  -3,  39 }, {  -2,  44 },
  355.     {   0,  46 }, { -16,  64 }, {  -8,  68 }, { -10,  78 },
  356.     {  -6,  77 }, { -10,  86 }, { -12,  92 }, { -15,  55 },
  357.     { -10,  60 }, {  -6,  62 }, {  -4,  65 }, { -12,  73 },
  358.     {  -8,  76 }, {  -7,  80 }, {  -9,  88 }, { -17, 110 },
  359.     {  -3,  70 }, {  -8,  93 }, { -10,  90 }, { -30, 127 },
  360.     {  -3,  70 }, {  -8,  93 }, { -10,  90 }, { -30, 127 },
  361.     {  -3,  70 }, {  -8,  93 }, { -10,  90 }, { -30, 127 }
  362. };
  363.  
  364. static const int8_t cabac_context_init_PB[3][1024][2] =
  365. {
  366.     /* i_cabac_init_idc == 0 */
  367.     {
  368.         /* 0 - 10 */
  369.         {  20, -15 }, {   2,  54 }, {   3,  74 }, {  20, -15 },
  370.         {   2,  54 }, {   3,  74 }, { -28, 127 }, { -23, 104 },
  371.         {  -6,  53 }, {  -1,  54 }, {   7,  51 },
  372.  
  373.         /* 11 - 23 */
  374.         {  23,  33 }, {  23,   2 }, {  21,   0 }, {   1,   9 },
  375.         {   0,  49 }, { -37, 118 }, {   5,  57 }, { -13,  78 },
  376.         { -11,  65 }, {   1,  62 }, {  12,  49 }, {  -4,  73 },
  377.         {  17,  50 },
  378.  
  379.         /* 24 - 39 */
  380.         {  18,  64 }, {   9,  43 }, {  29,   0 }, {  26,  67 },
  381.         {  16,  90 }, {   9, 104 }, { -46, 127 }, { -20, 104 },
  382.         {   1,  67 }, { -13,  78 }, { -11,  65 }, {   1,  62 },
  383.         {  -6,  86 }, { -17,  95 }, {  -6,  61 }, {   9,  45 },
  384.  
  385.         /* 40 - 53 */
  386.         {  -3,  69 }, {  -6,  81 }, { -11,  96 }, {   6,  55 },
  387.         {   7,  67 }, {  -5,  86 }, {   2,  88 }, {   0,  58 },
  388.         {  -3,  76 }, { -10,  94 }, {   5,  54 }, {   4,  69 },
  389.         {  -3,  81 }, {   0,  88 },
  390.  
  391.         /* 54 - 59 */
  392.         {  -7,  67 }, {  -5,  74 }, {  -4,  74 }, {  -5,  80 },
  393.         {  -7,  72 }, {   1,  58 },
  394.  
  395.         /* 60 - 69 */
  396.         {   0,  41 }, {   0,  63 }, {   0,  63 }, { 0, 63 },
  397.         {  -9,  83 }, {   4,  86 }, {   0,  97 }, { -7, 72 },
  398.         {  13,  41 }, {   3,  62 },
  399.  
  400.         /* 70 - 87 */
  401.         {   0,  45 }, {  -4,  78 }, {  -3,  96 }, { -27,  126 },
  402.         { -28,  98 }, { -25, 101 }, { -23,  67 }, { -28,  82 },
  403.         { -20,  94 }, { -16,  83 }, { -22, 110 }, { -21,  91 },
  404.         { -18, 102 }, { -13,  93 }, { -29, 127 }, {  -7,  92 },
  405.         {  -5,  89 }, {  -7,  96 }, { -13, 108 }, {  -3,  46 },
  406.         {  -1,  65 }, {  -1,  57 }, {  -9,  93 }, {  -3,  74 },
  407.         {  -9,  92 }, {  -8,  87 }, { -23, 126 }, {   5,  54 },
  408.         {   6,  60 }, {   6,  59 }, {   6,  69 }, {  -1,  48 },
  409.         {   0,  68 }, {  -4,  69 }, {  -8,  88 },
  410.  
  411.         /* 105 -> 165 */
  412.         {  -2,  85 }, {  -6,  78 }, {  -1,  75 }, {  -7,  77 },
  413.         {   2,  54 }, {   5,  50 }, {  -3,  68 }, {   1,  50 },
  414.         {   6,  42 }, {  -4,  81 }, {   1,  63 }, {  -4,  70 },
  415.         {   0,  67 }, {   2,  57 }, {  -2,  76 }, {  11,  35 },
  416.         {   4,  64 }, {   1,  61 }, {  11,  35 }, {  18,  25 },
  417.         {  12,  24 }, {  13,  29 }, {  13,  36 }, { -10,  93 },
  418.         {  -7,  73 }, {  -2,  73 }, {  13,  46 }, {   9,  49 },
  419.         {  -7, 100 }, {   9,  53 }, {   2,  53 }, {   5,  53 },
  420.         {  -2,  61 }, {   0,  56 }, {   0,  56 }, { -13,  63 },
  421.         {  -5,  60 }, {  -1,  62 }, {   4,  57 }, {  -6,  69 },
  422.         {   4,  57 }, {  14,  39 }, {   4,  51 }, {  13,  68 },
  423.         {   3,  64 }, {   1,  61 }, {   9,  63 }, {   7,  50 },
  424.         {  16,  39 }, {   5,  44 }, {   4,  52 }, {  11,  48 },
  425.         {  -5,  60 }, {  -1,  59 }, {   0,  59 }, {  22,  33 },
  426.         {   5,  44 }, {  14,  43 }, {  -1,  78 }, {   0,  60 },
  427.         {   9,  69 },
  428.  
  429.         /* 166 - 226 */
  430.         {  11,  28 }, {   2,  40 }, {   3,  44 }, {   0,  49 },
  431.         {   0,  46 }, {   2,  44 }, {   2,  51 }, {   0,  47 },
  432.         {   4,  39 }, {   2,  62 }, {   6,  46 }, {   0,  54 },
  433.         {   3,  54 }, {   2,  58 }, {   4,  63 }, {   6,  51 },
  434.         {   6,  57 }, {   7,  53 }, {   6,  52 }, {   6,  55 },
  435.         {  11,  45 }, {  14,  36 }, {   8,  53 }, {  -1,  82 },
  436.         {   7,  55 }, {  -3,  78 }, {  15,  46 }, {  22,  31 },
  437.         {  -1,  84 }, {  25,   7 }, {  30,  -7 }, {  28,   3 },
  438.         {  28,   4 }, {  32,   0 }, {  34,  -1 }, {  30,   6 },
  439.         {  30,   6 }, {  32,   9 }, {  31,  19 }, {  26,  27 },
  440.         {  26,  30 }, {  37,  20 }, {  28,  34 }, {  17,  70 },
  441.         {   1,  67 }, {   5,  59 }, {   9,  67 }, {  16,  30 },
  442.         {  18,  32 }, {  18,  35 }, {  22,  29 }, {  24,  31 },
  443.         {  23,  38 }, {  18,  43 }, {  20,  41 }, {  11,  63 },
  444.         {   9,  59 }, {   9,  64 }, {  -1,  94 }, {  -2,  89 },
  445.         {  -9, 108 },
  446.  
  447.         /* 227 - 275 */
  448.         {  -6,  76 }, {  -2,  44 }, {   0,  45 }, {   0,  52 },
  449.         {  -3,  64 }, {  -2,  59 }, {  -4,  70 }, {  -4,  75 },
  450.         {  -8,  82 }, { -17, 102 }, {  -9,  77 }, {   3,  24 },
  451.         {   0,  42 }, {   0,  48 }, {   0,  55 }, {  -6,  59 },
  452.         {  -7,  71 }, { -12,  83 }, { -11,  87 }, { -30, 119 },
  453.         {   1,  58 }, {  -3,  29 }, {  -1,  36 }, {   1,  38 },
  454.         {   2,  43 }, {  -6,  55 }, {   0,  58 }, {   0,  64 },
  455.         {  -3,  74 }, { -10,  90 }, {   0,  70 }, {  -4,  29 },
  456.         {   5,  31 }, {   7,  42 }, {   1,  59 }, {  -2,  58 },
  457.         {  -3,  72 }, {  -3,  81 }, { -11,  97 }, {   0,  58 },
  458.         {   8,   5 }, {  10,  14 }, {  14,  18 }, {  13,  27 },
  459.         {   2,  40 }, {   0,  58 }, {  -3,  70 }, {  -6,  79 },
  460.         {  -8,  85 },
  461.  
  462.         /* 276 a bit special (not used, bypass is used instead) */
  463.         { 0, 0 },
  464.  
  465.         /* 277 - 337 */
  466.         { -13, 106 }, { -16, 106 }, { -10,  87 }, { -21, 114 },
  467.         { -18, 110 }, { -14,  98 }, { -22, 110 }, { -21, 106 },
  468.         { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
  469.         { -10,  96 }, { -12,  95 }, {  -5,  91 }, {  -9,  93 },
  470.         { -22,  94 }, {  -5,  86 }, {   9,  67 }, {  -4,  80 },
  471.         { -10,  85 }, {  -1,  70 }, {   7,  60 }, {   9,  58 },
  472.         {   5,  61 }, {  12,  50 }, {  15,  50 }, {  18,  49 },
  473.         {  17,  54 }, {  10,  41 }, {   7,  46 }, {  -1,  51 },
  474.         {   7,  49 }, {   8,  52 }, {   9,  41 }, {   6,  47 },
  475.         {   2,  55 }, {  13,  41 }, {  10,  44 }, {   6,  50 },
  476.         {   5,  53 }, {  13,  49 }, {   4,  63 }, {   6,  64 },
  477.         {  -2,  69 }, {  -2,  59 }, {   6,  70 }, {  10,  44 },
  478.         {   9,  31 }, {  12,  43 }, {   3,  53 }, {  14,  34 },
  479.         {  10,  38 }, {  -3,  52 }, {  13,  40 }, {  17,  32 },
  480.         {   7,  44 }, {   7,  38 }, {  13,  50 }, {  10,  57 },
  481.         {  26,  43 },
  482.  
  483.         /* 338 - 398 */
  484.         {  14,  11 }, {  11,  14 }, {   9,  11 }, {  18,  11 },
  485.         {  21,   9 }, {  23,  -2 }, {  32, -15 }, {  32, -15 },
  486.         {  34, -21 }, {  39, -23 }, {  42, -33 }, {  41, -31 },
  487.         {  46, -28 }, {  38, -12 }, {  21,  29 }, {  45, -24 },
  488.         {  53, -45 }, {  48, -26 }, {  65, -43 }, {  43, -19 },
  489.         {  39, -10 }, {  30,   9 }, {  18,  26 }, {  20,  27 },
  490.         {   0,  57 }, { -14,  82 }, {  -5,  75 }, { -19,  97 },
  491.         { -35, 125 }, {  27,   0 }, {  28,   0 }, {  31,  -4 },
  492.         {  27,   6 }, {  34,   8 }, {  30,  10 }, {  24,  22 },
  493.         {  33,  19 }, {  22,  32 }, {  26,  31 }, {  21,  41 },
  494.         {  26,  44 }, {  23,  47 }, {  16,  65 }, {  14,  71 },
  495.         {   8,  60 }, {   6,  63 }, {  17,  65 }, {  21,  24 },
  496.         {  23,  20 }, {  26,  23 }, {  27,  32 }, {  28,  23 },
  497.         {  28,  24 }, {  23,  40 }, {  24,  32 }, {  28,  29 },
  498.         {  23,  42 }, {  19,  57 }, {  22,  53 }, {  22,  61 },
  499.         {  11,  86 },
  500.  
  501.         /* 399 - 435 */
  502.         {  12,  40 }, {  11,  51 }, {  14,  59 },
  503.         {  -4,  79 }, {  -7,  71 }, {  -5,  69 }, {  -9,  70 },
  504.         {  -8,  66 }, { -10,  68 }, { -19,  73 }, { -12,  69 },
  505.         { -16,  70 }, { -15,  67 }, { -20,  62 }, { -19,  70 },
  506.         { -16,  66 }, { -22,  65 }, { -20,  63 }, {   9,  -2 },
  507.         {  26,  -9 }, {  33,  -9 }, {  39,  -7 }, {  41,  -2 },
  508.         {  45,   3 }, {  49,   9 }, {  45,  27 }, {  36,  59 },
  509.         {  -6,  66 }, {  -7,  35 }, {  -7,  42 }, {  -8,  45 },
  510.         {  -5,  48 }, { -12,  56 }, {  -6,  60 }, {  -5,  62 },
  511.         {  -8,  66 }, {  -8,  76 },
  512.  
  513.         /* 436 - 459 */
  514.         {  -5,  85 }, {  -6,  81 }, { -10,  77 }, {  -7,  81 },
  515.         { -17,  80 }, { -18,  73 }, {  -4,  74 }, { -10,  83 },
  516.         {  -9,  71 }, {  -9,  67 }, {  -1,  61 }, {  -8,  66 },
  517.         { -14,  66 }, {   0,  59 }, {   2,  59 }, {  21, -13 },
  518.         {  33, -14 }, {  39,  -7 }, {  46,  -2 }, {  51,   2 },
  519.         {  60,   6 }, {  61,  17 }, {  55,  34 }, {  42,  62 },
  520.  
  521.         /* 460 - 1024 */
  522.         {  -7,  92 }, {  -5,  89 }, {  -7,  96 }, { -13, 108 },
  523.         {  -3,  46 }, {  -1,  65 }, {  -1,  57 }, {  -9,  93 },
  524.         {  -3,  74 }, {  -9,  92 }, {  -8,  87 }, { -23, 126 },
  525.         {  -7,  92 }, {  -5,  89 }, {  -7,  96 }, { -13, 108 },
  526.         {  -3,  46 }, {  -1,  65 }, {  -1,  57 }, {  -9,  93 },
  527.         {  -3,  74 }, {  -9,  92 }, {  -8,  87 }, { -23, 126 },
  528.         {  -2,  85 }, {  -6,  78 }, {  -1,  75 }, {  -7,  77 },
  529.         {   2,  54 }, {   5,  50 }, {  -3,  68 }, {   1,  50 },
  530.         {   6,  42 }, {  -4,  81 }, {   1,  63 }, {  -4,  70 },
  531.         {   0,  67 }, {   2,  57 }, {  -2,  76 }, {  11,  35 },
  532.         {   4,  64 }, {   1,  61 }, {  11,  35 }, {  18,  25 },
  533.         {  12,  24 }, {  13,  29 }, {  13,  36 }, { -10,  93 },
  534.         {  -7,  73 }, {  -2,  73 }, {  13,  46 }, {   9,  49 },
  535.         {  -7, 100 }, {   9,  53 }, {   2,  53 }, {   5,  53 },
  536.         {  -2,  61 }, {   0,  56 }, {   0,  56 }, { -13,  63 },
  537.         {  -5,  60 }, {  -1,  62 }, {   4,  57 }, {  -6,  69 },
  538.         {   4,  57 }, {  14,  39 }, {   4,  51 }, {  13,  68 },
  539.         {  -2,  85 }, {  -6,  78 }, {  -1,  75 }, {  -7,  77 },
  540.         {   2,  54 }, {   5,  50 }, {  -3,  68 }, {   1,  50 },
  541.         {   6,  42 }, {  -4,  81 }, {   1,  63 }, {  -4,  70 },
  542.         {   0,  67 }, {   2,  57 }, {  -2,  76 }, {  11,  35 },
  543.         {   4,  64 }, {   1,  61 }, {  11,  35 }, {  18,  25 },
  544.         {  12,  24 }, {  13,  29 }, {  13,  36 }, { -10,  93 },
  545.         {  -7,  73 }, {  -2,  73 }, {  13,  46 }, {   9,  49 },
  546.         {  -7, 100 }, {   9,  53 }, {   2,  53 }, {   5,  53 },
  547.         {  -2,  61 }, {   0,  56 }, {   0,  56 }, { -13,  63 },
  548.         {  -5,  60 }, {  -1,  62 }, {   4,  57 }, {  -6,  69 },
  549.         {   4,  57 }, {  14,  39 }, {   4,  51 }, {  13,  68 },
  550.         {  11,  28 }, {   2,  40 }, {   3,  44 }, {   0,  49 },
  551.         {   0,  46 }, {   2,  44 }, {   2,  51 }, {   0,  47 },
  552.         {   4,  39 }, {   2,  62 }, {   6,  46 }, {   0,  54 },
  553.         {   3,  54 }, {   2,  58 }, {   4,  63 }, {   6,  51 },
  554.         {   6,  57 }, {   7,  53 }, {   6,  52 }, {   6,  55 },
  555.         {  11,  45 }, {  14,  36 }, {   8,  53 }, {  -1,  82 },
  556.         {   7,  55 }, {  -3,  78 }, {  15,  46 }, {  22,  31 },
  557.         {  -1,  84 }, {  25,   7 }, {  30,  -7 }, {  28,   3 },
  558.         {  28,   4 }, {  32,   0 }, {  34,  -1 }, {  30,   6 },
  559.         {  30,   6 }, {  32,   9 }, {  31,  19 }, {  26,  27 },
  560.         {  26,  30 }, {  37,  20 }, {  28,  34 }, {  17,  70 },
  561.         {  11,  28 }, {   2,  40 }, {   3,  44 }, {   0,  49 },
  562.         {   0,  46 }, {   2,  44 }, {   2,  51 }, {   0,  47 },
  563.         {   4,  39 }, {   2,  62 }, {   6,  46 }, {   0,  54 },
  564.         {   3,  54 }, {   2,  58 }, {   4,  63 }, {   6,  51 },
  565.         {   6,  57 }, {   7,  53 }, {   6,  52 }, {   6,  55 },
  566.         {  11,  45 }, {  14,  36 }, {   8,  53 }, {  -1,  82 },
  567.         {   7,  55 }, {  -3,  78 }, {  15,  46 }, {  22,  31 },
  568.         {  -1,  84 }, {  25,   7 }, {  30,  -7 }, {  28,   3 },
  569.         {  28,   4 }, {  32,   0 }, {  34,  -1 }, {  30,   6 },
  570.         {  30,   6 }, {  32,   9 }, {  31,  19 }, {  26,  27 },
  571.         {  26,  30 }, {  37,  20 }, {  28,  34 }, {  17,  70 },
  572.         {  -4,  79 }, {  -7,  71 }, {  -5,  69 }, {  -9,  70 },
  573.         {  -8,  66 }, { -10,  68 }, { -19,  73 }, { -12,  69 },
  574.         { -16,  70 }, { -15,  67 }, { -20,  62 }, { -19,  70 },
  575.         { -16,  66 }, { -22,  65 }, { -20,  63 }, {  -5,  85 },
  576.         {  -6,  81 }, { -10,  77 }, {  -7,  81 }, { -17,  80 },
  577.         { -18,  73 }, {  -4,  74 }, { -10,  83 }, {  -9,  71 },
  578.         {  -9,  67 }, {  -1,  61 }, {  -8,  66 }, { -14,  66 },
  579.         {   0,  59 }, {   2,  59 }, {   9,  -2 }, {  26,  -9 },
  580.         {  33,  -9 }, {  39,  -7 }, {  41,  -2 }, {  45,   3 },
  581.         {  49,   9 }, {  45,  27 }, {  36,  59 }, {  21, -13 },
  582.         {  33, -14 }, {  39,  -7 }, {  46,  -2 }, {  51,   2 },
  583.         {  60,   6 }, {  61,  17 }, {  55,  34 }, {  42,  62 },
  584.         {  -6,  66 }, {  -7,  35 }, {  -7,  42 }, {  -8,  45 },
  585.         {  -5,  48 }, { -12,  56 }, {  -6,  60 }, {  -5,  62 },
  586.         {  -8,  66 }, {  -8,  76 }, {  -4,  79 }, {  -7,  71 },
  587.         {  -5,  69 }, {  -9,  70 }, {  -8,  66 }, { -10,  68 },
  588.         { -19,  73 }, { -12,  69 }, { -16,  70 }, { -15,  67 },
  589.         { -20,  62 }, { -19,  70 }, { -16,  66 }, { -22,  65 },
  590.         { -20,  63 }, {  -5,  85 }, {  -6,  81 }, { -10,  77 },
  591.         {  -7,  81 }, { -17,  80 }, { -18,  73 }, {  -4,  74 },
  592.         { -10,  83 }, {  -9,  71 }, {  -9,  67 }, {  -1,  61 },
  593.         {  -8,  66 }, { -14,  66 }, {   0,  59 }, {   2,  59 },
  594.         {   9,  -2 }, {  26,  -9 }, {  33,  -9 }, {  39,  -7 },
  595.         {  41,  -2 }, {  45,   3 }, {  49,   9 }, {  45,  27 },
  596.         {  36,  59 }, {  21, -13 }, {  33, -14 }, {  39,  -7 },
  597.         {  46,  -2 }, {  51,   2 }, {  60,   6 }, {  61,  17 },
  598.         {  55,  34 }, {  42,  62 }, {  -6,  66 }, {  -7,  35 },
  599.         {  -7,  42 }, {  -8,  45 }, {  -5,  48 }, { -12,  56 },
  600.         {  -6,  60 }, {  -5,  62 }, {  -8,  66 }, {  -8,  76 },
  601.         { -13, 106 }, { -16, 106 }, { -10,  87 }, { -21, 114 },
  602.         { -18, 110 }, { -14,  98 }, { -22, 110 }, { -21, 106 },
  603.         { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
  604.         { -10,  96 }, { -12,  95 }, {  -5,  91 }, {  -9,  93 },
  605.         { -22,  94 }, {  -5,  86 }, {   9,  67 }, {  -4,  80 },
  606.         { -10,  85 }, {  -1,  70 }, {   7,  60 }, {   9,  58 },
  607.         {   5,  61 }, {  12,  50 }, {  15,  50 }, {  18,  49 },
  608.         {  17,  54 }, {  10,  41 }, {   7,  46 }, {  -1,  51 },
  609.         {   7,  49 }, {   8,  52 }, {   9,  41 }, {   6,  47 },
  610.         {   2,  55 }, {  13,  41 }, {  10,  44 }, {   6,  50 },
  611.         {   5,  53 }, {  13,  49 }, {   4,  63 }, {   6,  64 },
  612.         { -13, 106 }, { -16, 106 }, { -10,  87 }, { -21, 114 },
  613.         { -18, 110 }, { -14,  98 }, { -22, 110 }, { -21, 106 },
  614.         { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 },
  615.         { -10,  96 }, { -12,  95 }, {  -5,  91 }, {  -9,  93 },
  616.         { -22,  94 }, {  -5,  86 }, {   9,  67 }, {  -4,  80 },
  617.         { -10,  85 }, {  -1,  70 }, {   7,  60 }, {   9,  58 },
  618.         {   5,  61 }, {  12,  50 }, {  15,  50 }, {  18,  49 },
  619.         {  17,  54 }, {  10,  41 }, {   7,  46 }, {  -1,  51 },
  620.         {   7,  49 }, {   8,  52 }, {   9,  41 }, {   6,  47 },
  621.         {   2,  55 }, {  13,  41 }, {  10,  44 }, {   6,  50 },
  622.         {   5,  53 }, {  13,  49 }, {   4,  63 }, {   6,  64 },
  623.         {  14,  11 }, {  11,  14 }, {   9,  11 }, {  18,  11 },
  624.         {  21,   9 }, {  23,  -2 }, {  32, -15 }, {  32, -15 },
  625.         {  34, -21 }, {  39, -23 }, {  42, -33 }, {  41, -31 },
  626.         {  46, -28 }, {  38, -12 }, {  21,  29 }, {  45, -24 },
  627.         {  53, -45 }, {  48, -26 }, {  65, -43 }, {  43, -19 },
  628.         {  39, -10 }, {  30,   9 }, {  18,  26 }, {  20,  27 },
  629.         {   0,  57 }, { -14,  82 }, {  -5,  75 }, { -19,  97 },
  630.         { -35, 125 }, {  27,   0 }, {  28,   0 }, {  31,  -4 },
  631.         {  27,   6 }, {  34,   8 }, {  30,  10 }, {  24,  22 },
  632.         {  33,  19 }, {  22,  32 }, {  26,  31 }, {  21,  41 },
  633.         {  26,  44 }, {  23,  47 }, {  16,  65 }, {  14,  71 },
  634.         {  14,  11 }, {  11,  14 }, {   9,  11 }, {  18,  11 },
  635.         {  21,   9 }, {  23,  -2 }, {  32, -15 }, {  32, -15 },
  636.         {  34, -21 }, {  39, -23 }, {  42, -33 }, {  41, -31 },
  637.         {  46, -28 }, {  38, -12 }, {  21,  29 }, {  45, -24 },
  638.         {  53, -45 }, {  48, -26 }, {  65, -43 }, {  43, -19 },
  639.         {  39, -10 }, {  30,   9 }, {  18,  26 }, {  20,  27 },
  640.         {   0,  57 }, { -14,  82 }, {  -5,  75 }, { -19,  97 },
  641.         { -35, 125 }, {  27,   0 }, {  28,   0 }, {  31,  -4 },
  642.         {  27,   6 }, {  34,   8 }, {  30,  10 }, {  24,  22 },
  643.         {  33,  19 }, {  22,  32 }, {  26,  31 }, {  21,  41 },
  644.         {  26,  44 }, {  23,  47 }, {  16,  65 }, {  14,  71 },
  645.         {  -6,  76 }, {  -2,  44 }, {   0,  45 }, {   0,  52 },
  646.         {  -3,  64 }, {  -2,  59 }, {  -4,  70 }, {  -4,  75 },
  647.         {  -8,  82 }, { -17, 102 }, {  -9,  77 }, {   3,  24 },
  648.         {   0,  42 }, {   0,  48 }, {   0,  55 }, {  -6,  59 },
  649.         {  -7,  71 }, { -12,  83 }, { -11,  87 }, { -30, 119 },
  650.         {   1,  58 }, {  -3,  29 }, {  -1,  36 }, {   1,  38 },
  651.         {   2,  43 }, {  -6,  55 }, {   0,  58 }, {   0,  64 },
  652.         {  -3,  74 }, { -10,  90 }, {  -6,  76 }, {  -2,  44 },
  653.         {   0,  45 }, {   0,  52 }, {  -3,  64 }, {  -2,  59 },
  654.         {  -4,  70 }, {  -4,  75 }, {  -8,  82 }, { -17, 102 },
  655.         {  -9,  77 }, {   3,  24 }, {   0,  42 }, {   0,  48 },
  656.         {   0,  55 }, {  -6,  59 }, {  -7,  71 }, { -12,  83 },
  657.         { -11,  87 }, { -30, 119 }, {   1,  58 }, {  -3,  29 },
  658.         {  -1,  36 }, {   1,  38 }, {   2,  43 }, {  -6,  55 },
  659.         {   0,  58 }, {   0,  64 }, {  -3,  74 }, { -10,  90 },
  660.         {  -3,  74 }, {  -9,  92 }, {  -8,  87 }, { -23, 126 },
  661.         {  -3,  74 }, {  -9,  92 }, {  -8,  87 }, { -23, 126 },
  662.         {  -3,  74 }, {  -9,  92 }, {  -8,  87 }, { -23, 126 }
  663.     },
  664.  
  665.     /* i_cabac_init_idc == 1 */
  666.     {
  667.         /* 0 - 10 */
  668.         {  20, -15 }, {   2,  54 }, {   3,  74 }, {  20, -15 },
  669.         {   2,  54 }, {   3,  74 }, { -28, 127 }, { -23, 104 },
  670.         {  -6,  53 }, {  -1,  54 }, {   7,  51 },
  671.  
  672.         /* 11 - 23 */
  673.         {  22,  25 }, {  34,   0 }, {  16,   0 }, {  -2,   9 },
  674.         {   4,  41 }, { -29, 118 }, {   2,  65 }, {  -6,  71 },
  675.         { -13,  79 }, {   5,  52 }, {   9,  50 }, {  -3,  70 },
  676.         {  10,  54 },
  677.  
  678.         /* 24 - 39 */
  679.         {  26,  34 }, {  19,  22 }, {  40,   0 }, {  57,   2 },
  680.         {  41,  36 }, {  26,  69 }, { -45, 127 }, { -15, 101 },
  681.         {  -4,  76 }, {  -6,  71 }, { -13,  79 }, {   5,  52 },
  682.         {   6,  69 }, { -13,  90 }, {   0,  52 }, {   8,  43 },
  683.  
  684.         /* 40 - 53 */
  685.         {  -2,  69 },{  -5,  82 },{ -10,  96 },{   2,  59 },
  686.         {   2,  75 },{  -3,  87 },{  -3,  100 },{   1,  56 },
  687.         {  -3,  74 },{  -6,  85 },{   0,  59 },{  -3,  81 },
  688.         {  -7,  86 },{  -5,  95 },
  689.  
  690.         /* 54 - 59 */
  691.         {  -1,  66 },{  -1,  77 },{   1,  70 },{  -2,  86 },
  692.         {  -5,  72 },{   0,  61 },
  693.  
  694.         /* 60 - 69 */
  695.         { 0, 41 },   { 0, 63 },   { 0, 63 },     { 0, 63 },
  696.         { -9, 83 },  { 4, 86 },   { 0, 97 },     { -7, 72 },
  697.         { 13, 41 },  { 3, 62 },
  698.  
  699.         /* 70 - 104 */
  700.         {  13,  15 }, {   7,  51 }, {   2,  80 }, { -39, 127 },
  701.         { -18,  91 }, { -17,  96 }, { -26,  81 }, { -35,  98 },
  702.         { -24, 102 }, { -23,  97 }, { -27, 119 }, { -24,  99 },
  703.         { -21, 110 }, { -18, 102 }, { -36, 127 }, {   0,  80 },
  704.         {  -5,  89 }, {  -7,  94 }, {  -4,  92 }, {   0,  39 },
  705.         {   0,  65 }, { -15,  84 }, { -35, 127 }, {  -2,  73 },
  706.         { -12, 104 }, {  -9,  91 }, { -31, 127 }, {   3,  55 },
  707.         {   7,  56 }, {   7,  55 }, {   8,  61 }, {  -3,  53 },
  708.         {   0,  68 }, {  -7,  74 }, {  -9,  88 },
  709.  
  710.         /* 105 -> 165 */
  711.         { -13, 103 }, { -13,  91 }, {  -9,  89 }, { -14,  92 },
  712.         {  -8,  76 }, { -12,  87 }, { -23, 110 }, { -24, 105 },
  713.         { -10,  78 }, { -20, 112 }, { -17,  99 }, { -78, 127 },
  714.         { -70, 127 }, { -50, 127 }, { -46, 127 }, {  -4,  66 },
  715.         {  -5,  78 }, {  -4,  71 }, {  -8,  72 }, {   2,  59 },
  716.         {  -1,  55 }, {  -7,  70 }, {  -6,  75 }, {  -8,  89 },
  717.         { -34, 119 }, {  -3,  75 }, {  32,  20 }, {  30,  22 },
  718.         { -44, 127 }, {   0,  54 }, {  -5,  61 }, {   0,  58 },
  719.         {  -1,  60 }, {  -3,  61 }, {  -8,  67 }, { -25,  84 },
  720.         { -14,  74 }, {  -5,  65 }, {   5,  52 }, {   2,  57 },
  721.         {   0,  61 }, {  -9,  69 }, { -11,  70 }, {  18,  55 },
  722.         {  -4,  71 }, {   0,  58 }, {   7,  61 }, {   9,  41 },
  723.         {  18,  25 }, {   9,  32 }, {   5,  43 }, {   9,  47 },
  724.         {   0,  44 }, {   0,  51 }, {   2,  46 }, {  19,  38 },
  725.         {  -4,  66 }, {  15,  38 }, {  12,  42 }, {   9,  34 },
  726.         {   0,  89 },
  727.  
  728.         /* 166 - 226 */
  729.         {   4,  45 }, {  10,  28 }, {  10,  31 }, {  33, -11 },
  730.         {  52, -43 }, {  18,  15 }, {  28,   0 }, {  35, -22 },
  731.         {  38, -25 }, {  34,   0 }, {  39, -18 }, {  32, -12 },
  732.         { 102, -94 }, {   0,   0 }, {  56, -15 }, {  33,  -4 },
  733.         {  29,  10 }, {  37,  -5 }, {  51, -29 }, {  39,  -9 },
  734.         {  52, -34 }, {  69, -58 }, {  67, -63 }, {  44,  -5 },
  735.         {  32,   7 }, {  55, -29 }, {  32,   1 }, {   0,   0 },
  736.         {  27,  36 }, {  33, -25 }, {  34, -30 }, {  36, -28 },
  737.         {  38, -28 }, {  38, -27 }, {  34, -18 }, {  35, -16 },
  738.         {  34, -14 }, {  32,  -8 }, {  37,  -6 }, {  35,   0 },
  739.         {  30,  10 }, {  28,  18 }, {  26,  25 }, {  29,  41 },
  740.         {   0,  75 }, {   2,  72 }, {   8,  77 }, {  14,  35 },
  741.         {  18,  31 }, {  17,  35 }, {  21,  30 }, {  17,  45 },
  742.         {  20,  42 }, {  18,  45 }, {  27,  26 }, {  16,  54 },
  743.         {   7,  66 }, {  16,  56 }, {  11,  73 }, {  10,  67 },
  744.         { -10, 116 },
  745.  
  746.         /* 227 - 275 */
  747.         { -23, 112 }, { -15,  71 }, {  -7,  61 }, {   0,  53 },
  748.         {  -5,  66 }, { -11,  77 }, {  -9,  80 }, {  -9,  84 },
  749.         { -10,  87 }, { -34, 127 }, { -21, 101 }, {  -3,  39 },
  750.         {  -5,  53 }, {  -7,  61 }, { -11,  75 }, { -15,  77 },
  751.         { -17,  91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
  752.         { -11,  76 }, { -10,  44 }, { -10,  52 }, { -10,  57 },
  753.         {  -9,  58 }, { -16,  72 }, {  -7,  69 }, {  -4,  69 },
  754.         {  -5,  74 }, {  -9,  86 }, {   2,  66 }, {  -9,  34 },
  755.         {   1,  32 }, {  11,  31 }, {   5,  52 }, {  -2,  55 },
  756.         {  -2,  67 }, {   0,  73 }, {  -8,  89 }, {   3,  52 },
  757.         {   7,   4 }, {  10,   8 }, {  17,   8 }, {  16,  19 },
  758.         {   3,  37 }, {  -1,  61 }, {  -5,  73 }, {  -1,  70 },
  759.         {  -4,  78 },
  760.  
  761.         /* 276 a bit special (not used, bypass is used instead) */
  762.         { 0, 0 },
  763.  
  764.         /* 277 - 337 */
  765.         { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
  766.         { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
  767.         { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
  768.         { -10,  95 }, { -14, 100 }, {  -8,  95 }, { -17, 111 },
  769.         { -28, 114 }, {  -6,  89 }, {  -2,  80 }, {  -4,  82 },
  770.         {  -9,  85 }, {  -8,  81 }, {  -1,  72 }, {   5,  64 },
  771.         {   1,  67 }, {   9,  56 }, {   0,  69 }, {   1,  69 },
  772.         {   7,  69 }, {  -7,  69 }, {  -6,  67 }, { -16,  77 },
  773.         {  -2,  64 }, {   2,  61 }, {  -6,  67 }, {  -3,  64 },
  774.         {   2,  57 }, {  -3,  65 }, {  -3,  66 }, {   0,  62 },
  775.         {   9,  51 }, {  -1,  66 }, {  -2,  71 }, {  -2,  75 },
  776.         {  -1,  70 }, {  -9,  72 }, {  14,  60 }, {  16,  37 },
  777.         {   0,  47 }, {  18,  35 }, {  11,  37 }, {  12,  41 },
  778.         {  10,  41 }, {   2,  48 }, {  12,  41 }, {  13,  41 },
  779.         {   0,  59 }, {   3,  50 }, {  19,  40 }, {   3,  66 },
  780.         {  18,  50 },
  781.  
  782.         /* 338 - 398 */
  783.         {  19,  -6 }, {  18,  -6 }, {  14,   0 }, {  26, -12 },
  784.         {  31, -16 }, {  33, -25 }, {  33, -22 }, {  37, -28 },
  785.         {  39, -30 }, {  42, -30 }, {  47, -42 }, {  45, -36 },
  786.         {  49, -34 }, {  41, -17 }, {  32,   9 }, {  69, -71 },
  787.         {  63, -63 }, {  66, -64 }, {  77, -74 }, {  54, -39 },
  788.         {  52, -35 }, {  41, -10 }, {  36,   0 }, {  40,  -1 },
  789.         {  30,  14 }, {  28,  26 }, {  23,  37 }, {  12,  55 },
  790.         {  11,  65 }, {  37, -33 }, {  39, -36 }, {  40, -37 },
  791.         {  38, -30 }, {  46, -33 }, {  42, -30 }, {  40, -24 },
  792.         {  49, -29 }, {  38, -12 }, {  40, -10 }, {  38,  -3 },
  793.         {  46,  -5 }, {  31,  20 }, {  29,  30 }, {  25,  44 },
  794.         {  12,  48 }, {  11,  49 }, {  26,  45 }, {  22,  22 },
  795.         {  23,  22 }, {  27,  21 }, {  33,  20 }, {  26,  28 },
  796.         {  30,  24 }, {  27,  34 }, {  18,  42 }, {  25,  39 },
  797.         {  18,  50 }, {  12,  70 }, {  21,  54 }, {  14,  71 },
  798.         {  11,  83 },
  799.  
  800.         /* 399 - 435 */
  801.         {  25,  32 }, {  21,  49 }, {  21,  54 },
  802.         {  -5,  85 }, {  -6,  81 }, { -10,  77 }, {  -7,  81 },
  803.         { -17,  80 }, { -18,  73 }, {  -4,  74 }, { -10,  83 },
  804.         {  -9,  71 }, {  -9,  67 }, {  -1,  61 }, {  -8,  66 },
  805.         { -14,  66 }, {   0,  59 }, {   2,  59 }, {  17, -10 },
  806.         {  32, -13 }, {  42,  -9 }, {  49,  -5 }, {  53,   0 },
  807.         {  64,   3 }, {  68,  10 }, {  66,  27 }, {  47,  57 },
  808.         {  -5,  71 }, {   0,  24 }, {  -1,  36 }, {  -2,  42 },
  809.         {  -2,  52 }, {  -9,  57 }, {  -6,  63 }, {  -4,  65 },
  810.         {  -4,  67 }, {  -7,  82 },
  811.  
  812.         /* 436 - 459 */
  813.         {  -3,  81 }, {  -3,  76 }, {  -7,  72 }, {  -6,  78 },
  814.         { -12,  72 }, { -14,  68 }, {  -3,  70 }, {  -6,  76 },
  815.         {  -5,  66 }, {  -5,  62 }, {   0,  57 }, {  -4,  61 },
  816.         {  -9,  60 }, {   1,  54 }, {   2,  58 }, {  17, -10 },
  817.         {  32, -13 }, {  42,  -9 }, {  49,  -5 }, {  53,   0 },
  818.         {  64,   3 }, {  68,  10 }, {  66,  27 }, {  47,  57 },
  819.  
  820.         /* 460 - 1024 */
  821.         {   0,  80 }, {  -5,  89 }, {  -7,  94 }, {  -4,  92 },
  822.         {   0,  39 }, {   0,  65 }, { -15,  84 }, { -35, 127 },
  823.         {  -2,  73 }, { -12, 104 }, {  -9,  91 }, { -31, 127 },
  824.         {   0,  80 }, {  -5,  89 }, {  -7,  94 }, {  -4,  92 },
  825.         {   0,  39 }, {   0,  65 }, { -15,  84 }, { -35, 127 },
  826.         {  -2,  73 }, { -12, 104 }, {  -9,  91 }, { -31, 127 },
  827.         { -13, 103 }, { -13,  91 }, {  -9,  89 }, { -14,  92 },
  828.         {  -8,  76 }, { -12,  87 }, { -23, 110 }, { -24, 105 },
  829.         { -10,  78 }, { -20, 112 }, { -17,  99 }, { -78, 127 },
  830.         { -70, 127 }, { -50, 127 }, { -46, 127 }, {  -4,  66 },
  831.         {  -5,  78 }, {  -4,  71 }, {  -8,  72 }, {   2,  59 },
  832.         {  -1,  55 }, {  -7,  70 }, {  -6,  75 }, {  -8,  89 },
  833.         { -34, 119 }, {  -3,  75 }, {  32,  20 }, {  30,  22 },
  834.         { -44, 127 }, {   0,  54 }, {  -5,  61 }, {   0,  58 },
  835.         {  -1,  60 }, {  -3,  61 }, {  -8,  67 }, { -25,  84 },
  836.         { -14,  74 }, {  -5,  65 }, {   5,  52 }, {   2,  57 },
  837.         {   0,  61 }, {  -9,  69 }, { -11,  70 }, {  18,  55 },
  838.         { -13, 103 }, { -13,  91 }, {  -9,  89 }, { -14,  92 },
  839.         {  -8,  76 }, { -12,  87 }, { -23, 110 }, { -24, 105 },
  840.         { -10,  78 }, { -20, 112 }, { -17,  99 }, { -78, 127 },
  841.         { -70, 127 }, { -50, 127 }, { -46, 127 }, {  -4,  66 },
  842.         {  -5,  78 }, {  -4,  71 }, {  -8,  72 }, {   2,  59 },
  843.         {  -1,  55 }, {  -7,  70 }, {  -6,  75 }, {  -8,  89 },
  844.         { -34, 119 }, {  -3,  75 }, {  32,  20 }, {  30,  22 },
  845.         { -44, 127 }, {   0,  54 }, {  -5,  61 }, {   0,  58 },
  846.         {  -1,  60 }, {  -3,  61 }, {  -8,  67 }, { -25,  84 },
  847.         { -14,  74 }, {  -5,  65 }, {   5,  52 }, {   2,  57 },
  848.         {   0,  61 }, {  -9,  69 }, { -11,  70 }, {  18,  55 },
  849.         {   4,  45 }, {  10,  28 }, {  10,  31 }, {  33, -11 },
  850.         {  52, -43 }, {  18,  15 }, {  28,   0 }, {  35, -22 },
  851.         {  38, -25 }, {  34,   0 }, {  39, -18 }, {  32, -12 },
  852.         { 102, -94 }, {   0,   0 }, {  56, -15 }, {  33,  -4 },
  853.         {  29,  10 }, {  37,  -5 }, {  51, -29 }, {  39,  -9 },
  854.         {  52, -34 }, {  69, -58 }, {  67, -63 }, {  44,  -5 },
  855.         {  32,   7 }, {  55, -29 }, {  32,   1 }, {   0,   0 },
  856.         {  27,  36 }, {  33, -25 }, {  34, -30 }, {  36, -28 },
  857.         {  38, -28 }, {  38, -27 }, {  34, -18 }, {  35, -16 },
  858.         {  34, -14 }, {  32,  -8 }, {  37,  -6 }, {  35,   0 },
  859.         {  30,  10 }, {  28,  18 }, {  26,  25 }, {  29,  41 },
  860.         {   4,  45 }, {  10,  28 }, {  10,  31 }, {  33, -11 },
  861.         {  52, -43 }, {  18,  15 }, {  28,   0 }, {  35, -22 },
  862.         {  38, -25 }, {  34,   0 }, {  39, -18 }, {  32, -12 },
  863.         { 102, -94 }, {   0,   0 }, {  56, -15 }, {  33,  -4 },
  864.         {  29,  10 }, {  37,  -5 }, {  51, -29 }, {  39,  -9 },
  865.         {  52, -34 }, {  69, -58 }, {  67, -63 }, {  44,  -5 },
  866.         {  32,   7 }, {  55, -29 }, {  32,   1 }, {   0,   0 },
  867.         {  27,  36 }, {  33, -25 }, {  34, -30 }, {  36, -28 },
  868.         {  38, -28 }, {  38, -27 }, {  34, -18 }, {  35, -16 },
  869.         {  34, -14 }, {  32,  -8 }, {  37,  -6 }, {  35,   0 },
  870.         {  30,  10 }, {  28,  18 }, {  26,  25 }, {  29,  41 },
  871.         {  -5,  85 }, {  -6,  81 }, { -10,  77 }, {  -7,  81 },
  872.         { -17,  80 }, { -18,  73 }, {  -4,  74 }, { -10,  83 },
  873.         {  -9,  71 }, {  -9,  67 }, {  -1,  61 }, {  -8,  66 },
  874.         { -14,  66 }, {   0,  59 }, {   2,  59 }, {  -3,  81 },
  875.         {  -3,  76 }, {  -7,  72 }, {  -6,  78 }, { -12,  72 },
  876.         { -14,  68 }, {  -3,  70 }, {  -6,  76 }, {  -5,  66 },
  877.         {  -5,  62 }, {   0,  57 }, {  -4,  61 }, {  -9,  60 },
  878.         {   1,  54 }, {   2,  58 }, {  17, -10 }, {  32, -13 },
  879.         {  42,  -9 }, {  49,  -5 }, {  53,   0 }, {  64,   3 },
  880.         {  68,  10 }, {  66,  27 }, {  47,  57 }, {  17, -10 },
  881.         {  32, -13 }, {  42,  -9 }, {  49,  -5 }, {  53,   0 },
  882.         {  64,   3 }, {  68,  10 }, {  66,  27 }, {  47,  57 },
  883.         {  -5,  71 }, {   0,  24 }, {  -1,  36 }, {  -2,  42 },
  884.         {  -2,  52 }, {  -9,  57 }, {  -6,  63 }, {  -4,  65 },
  885.         {  -4,  67 }, {  -7,  82 }, {  -5,  85 }, {  -6,  81 },
  886.         { -10,  77 }, {  -7,  81 }, { -17,  80 }, { -18,  73 },
  887.         {  -4,  74 }, { -10,  83 }, {  -9,  71 }, {  -9,  67 },
  888.         {  -1,  61 }, {  -8,  66 }, { -14,  66 }, {   0,  59 },
  889.         {   2,  59 }, {  -3,  81 }, {  -3,  76 }, {  -7,  72 },
  890.         {  -6,  78 }, { -12,  72 }, { -14,  68 }, {  -3,  70 },
  891.         {  -6,  76 }, {  -5,  66 }, {  -5,  62 }, {   0,  57 },
  892.         {  -4,  61 }, {  -9,  60 }, {   1,  54 }, {   2,  58 },
  893.         {  17, -10 }, {  32, -13 }, {  42,  -9 }, {  49,  -5 },
  894.         {  53,   0 }, {  64,   3 }, {  68,  10 }, {  66,  27 },
  895.         {  47,  57 }, {  17, -10 }, {  32, -13 }, {  42,  -9 },
  896.         {  49,  -5 }, {  53,   0 }, {  64,   3 }, {  68,  10 },
  897.         {  66,  27 }, {  47,  57 }, {  -5,  71 }, {   0,  24 },
  898.         {  -1,  36 }, {  -2,  42 }, {  -2,  52 }, {  -9,  57 },
  899.         {  -6,  63 }, {  -4,  65 }, {  -4,  67 }, {  -7,  82 },
  900.         { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
  901.         { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
  902.         { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
  903.         { -10,  95 }, { -14, 100 }, {  -8,  95 }, { -17, 111 },
  904.         { -28, 114 }, {  -6,  89 }, {  -2,  80 }, {  -4,  82 },
  905.         {  -9,  85 }, {  -8,  81 }, {  -1,  72 }, {   5,  64 },
  906.         {   1,  67 }, {   9,  56 }, {   0,  69 }, {   1,  69 },
  907.         {   7,  69 }, {  -7,  69 }, {  -6,  67 }, { -16,  77 },
  908.         {  -2,  64 }, {   2,  61 }, {  -6,  67 }, {  -3,  64 },
  909.         {   2,  57 }, {  -3,  65 }, {  -3,  66 }, {   0,  62 },
  910.         {   9,  51 }, {  -1,  66 }, {  -2,  71 }, {  -2,  75 },
  911.         { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 },
  912.         { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 },
  913.         { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 },
  914.         { -10,  95 }, { -14, 100 }, {  -8,  95 }, { -17, 111 },
  915.         { -28, 114 }, {  -6,  89 }, {  -2,  80 }, {  -4,  82 },
  916.         {  -9,  85 }, {  -8,  81 }, {  -1,  72 }, {   5,  64 },
  917.         {   1,  67 }, {   9,  56 }, {   0,  69 }, {   1,  69 },
  918.         {   7,  69 }, {  -7,  69 }, {  -6,  67 }, { -16,  77 },
  919.         {  -2,  64 }, {   2,  61 }, {  -6,  67 }, {  -3,  64 },
  920.         {   2,  57 }, {  -3,  65 }, {  -3,  66 }, {   0,  62 },
  921.         {   9,  51 }, {  -1,  66 }, {  -2,  71 }, {  -2,  75 },
  922.         {  19,  -6 }, {  18,  -6 }, {  14,   0 }, {  26, -12 },
  923.         {  31, -16 }, {  33, -25 }, {  33, -22 }, {  37, -28 },
  924.         {  39, -30 }, {  42, -30 }, {  47, -42 }, {  45, -36 },
  925.         {  49, -34 }, {  41, -17 }, {  32,   9 }, {  69, -71 },
  926.         {  63, -63 }, {  66, -64 }, {  77, -74 }, {  54, -39 },
  927.         {  52, -35 }, {  41, -10 }, {  36,   0 }, {  40,  -1 },
  928.         {  30,  14 }, {  28,  26 }, {  23,  37 }, {  12,  55 },
  929.         {  11,  65 }, {  37, -33 }, {  39, -36 }, {  40, -37 },
  930.         {  38, -30 }, {  46, -33 }, {  42, -30 }, {  40, -24 },
  931.         {  49, -29 }, {  38, -12 }, {  40, -10 }, {  38,  -3 },
  932.         {  46,  -5 }, {  31,  20 }, {  29,  30 }, {  25,  44 },
  933.         {  19,  -6 }, {  18,  -6 }, {  14,   0 }, {  26, -12 },
  934.         {  31, -16 }, {  33, -25 }, {  33, -22 }, {  37, -28 },
  935.         {  39, -30 }, {  42, -30 }, {  47, -42 }, {  45, -36 },
  936.         {  49, -34 }, {  41, -17 }, {  32,   9 }, {  69, -71 },
  937.         {  63, -63 }, {  66, -64 }, {  77, -74 }, {  54, -39 },
  938.         {  52, -35 }, {  41, -10 }, {  36,   0 }, {  40,  -1 },
  939.         {  30,  14 }, {  28,  26 }, {  23,  37 }, {  12,  55 },
  940.         {  11,  65 }, {  37, -33 }, {  39, -36 }, {  40, -37 },
  941.         {  38, -30 }, {  46, -33 }, {  42, -30 }, {  40, -24 },
  942.         {  49, -29 }, {  38, -12 }, {  40, -10 }, {  38,  -3 },
  943.         {  46,  -5 }, {  31,  20 }, {  29,  30 }, {  25,  44 },
  944.         { -23, 112 }, { -15,  71 }, {  -7,  61 }, {   0,  53 },
  945.         {  -5,  66 }, { -11,  77 }, {  -9,  80 }, {  -9,  84 },
  946.         { -10,  87 }, { -34, 127 }, { -21, 101 }, {  -3,  39 },
  947.         {  -5,  53 }, {  -7,  61 }, { -11,  75 }, { -15,  77 },
  948.         { -17,  91 }, { -25, 107 }, { -25, 111 }, { -28, 122 },
  949.         { -11,  76 }, { -10,  44 }, { -10,  52 }, { -10,  57 },
  950.         {  -9,  58 }, { -16,  72 }, {  -7,  69 }, {  -4,  69 },
  951.         {  -5,  74 }, {  -9,  86 }, { -23, 112 }, { -15,  71 },
  952.         {  -7,  61 }, {   0,  53 }, {  -5,  66 }, { -11,  77 },
  953.         {  -9,  80 }, {  -9,  84 }, { -10,  87 }, { -34, 127 },
  954.         { -21, 101 }, {  -3,  39 }, {  -5,  53 }, {  -7,  61 },
  955.         { -11,  75 }, { -15,  77 }, { -17,  91 }, { -25, 107 },
  956.         { -25, 111 }, { -28, 122 }, { -11,  76 }, { -10,  44 },
  957.         { -10,  52 }, { -10,  57 }, {  -9,  58 }, { -16,  72 },
  958.         {  -7,  69 }, {  -4,  69 }, {  -5,  74 }, {  -9,  86 },
  959.         {  -2,  73 }, { -12, 104 }, {  -9,  91 }, { -31, 127 },
  960.         {  -2,  73 }, { -12, 104 }, {  -9,  91 }, { -31, 127 },
  961.         {  -2,  73 }, { -12, 104 }, {  -9,  91 }, { -31, 127 }
  962.     },
  963.  
  964.     /* i_cabac_init_idc == 2 */
  965.     {
  966.         /* 0 - 10 */
  967.         {  20, -15 }, {   2,  54 }, {   3,  74 }, {  20, -15 },
  968.         {   2,  54 }, {   3,  74 }, { -28, 127 }, { -23, 104 },
  969.         {  -6,  53 }, {  -1,  54 }, {   7,  51 },
  970.  
  971.         /* 11 - 23 */
  972.         {  29,  16 }, {  25,   0 }, {  14,   0 }, { -10,  51 },
  973.         {  -3,  62 }, { -27,  99 }, {  26,  16 }, {  -4,  85 },
  974.         { -24, 102 }, {   5,  57 }, {   6,  57 }, { -17,  73 },
  975.         {  14,  57 },
  976.  
  977.         /* 24 - 39 */
  978.         {  20,  40 }, {  20,  10 }, {  29,   0 }, {  54,   0 },
  979.         {  37,  42 }, {  12,  97 }, { -32, 127 }, { -22, 117 },
  980.         {  -2,  74 }, {  -4,  85 }, { -24, 102 }, {   5,  57 },
  981.         {  -6,  93 }, { -14,  88 }, {  -6,  44 }, {   4,  55 },
  982.  
  983.         /* 40 - 53 */
  984.         { -11,  89 },{ -15,  103 },{ -21,  116 },{  19,  57 },
  985.         {  20,  58 },{   4,  84 },{   6,  96 },{   1,  63 },
  986.         {  -5,  85 },{ -13,  106 },{   5,  63 },{   6,  75 },
  987.         {  -3,  90 },{  -1,  101 },
  988.  
  989.         /* 54 - 59 */
  990.         {   3,  55 },{  -4,  79 },{  -2,  75 },{ -12,  97 },
  991.         {  -7,  50 },{   1,  60 },
  992.  
  993.         /* 60 - 69 */
  994.         { 0, 41 },   { 0, 63 },   { 0, 63 },     { 0, 63 },
  995.         { -9, 83 },  { 4, 86 },   { 0, 97 },     { -7, 72 },
  996.         { 13, 41 },  { 3, 62 },
  997.  
  998.         /* 70 - 104 */
  999.         {   7,  34 }, {  -9,  88 }, { -20, 127 }, { -36, 127 },
  1000.         { -17,  91 }, { -14,  95 }, { -25,  84 }, { -25,  86 },
  1001.         { -12,  89 }, { -17,  91 }, { -31, 127 }, { -14,  76 },
  1002.         { -18, 103 }, { -13,  90 }, { -37, 127 }, {  11,  80 },
  1003.         {   5,  76 }, {   2,  84 }, {   5,  78 }, {  -6,  55 },
  1004.         {   4,  61 }, { -14,  83 }, { -37, 127 }, {  -5,  79 },
  1005.         { -11, 104 }, { -11,  91 }, { -30, 127 }, {   0,  65 },
  1006.         {  -2,  79 }, {   0,  72 }, {  -4,  92 }, {  -6,  56 },
  1007.         {   3,  68 }, {  -8,  71 }, { -13,  98 },
  1008.  
  1009.         /* 105 -> 165 */
  1010.         {  -4,  86 }, { -12,  88 }, {  -5,  82 }, {  -3,  72 },
  1011.         {  -4,  67 }, {  -8,  72 }, { -16,  89 }, {  -9,  69 },
  1012.         {  -1,  59 }, {   5,  66 }, {   4,  57 }, {  -4,  71 },
  1013.         {  -2,  71 }, {   2,  58 }, {  -1,  74 }, {  -4,  44 },
  1014.         {  -1,  69 }, {   0,  62 }, {  -7,  51 }, {  -4,  47 },
  1015.         {  -6,  42 }, {  -3,  41 }, {  -6,  53 }, {   8,  76 },
  1016.         {  -9,  78 }, { -11,  83 }, {   9,  52 }, {   0,  67 },
  1017.         {  -5,  90 }, {   1,  67 }, { -15,  72 }, {  -5,  75 },
  1018.         {  -8,  80 }, { -21,  83 }, { -21,  64 }, { -13,  31 },
  1019.         { -25,  64 }, { -29,  94 }, {   9,  75 }, {  17,  63 },
  1020.         {  -8,  74 }, {  -5,  35 }, {  -2,  27 }, {  13,  91 },
  1021.         {   3,  65 }, {  -7,  69 }, {   8,  77 }, { -10,  66 },
  1022.         {   3,  62 }, {  -3,  68 }, { -20,  81 }, {   0,  30 },
  1023.         {   1,   7 }, {  -3,  23 }, { -21,  74 }, {  16,  66 },
  1024.         { -23, 124 }, {  17,  37 }, {  44, -18 }, {  50, -34 },
  1025.         { -22, 127 },
  1026.  
  1027.         /* 166 - 226 */
  1028.         {   4,  39 }, {   0,  42 }, {   7,  34 }, {  11,  29 },
  1029.         {   8,  31 }, {   6,  37 }, {   7,  42 }, {   3,  40 },
  1030.         {   8,  33 }, {  13,  43 }, {  13,  36 }, {   4,  47 },
  1031.         {   3,  55 }, {   2,  58 }, {   6,  60 }, {   8,  44 },
  1032.         {  11,  44 }, {  14,  42 }, {   7,  48 }, {   4,  56 },
  1033.         {   4,  52 }, {  13,  37 }, {   9,  49 }, {  19,  58 },
  1034.         {  10,  48 }, {  12,  45 }, {   0,  69 }, {  20,  33 },
  1035.         {   8,  63 }, {  35, -18 }, {  33, -25 }, {  28,  -3 },
  1036.         {  24,  10 }, {  27,   0 }, {  34, -14 }, {  52, -44 },
  1037.         {  39, -24 }, {  19,  17 }, {  31,  25 }, {  36,  29 },
  1038.         {  24,  33 }, {  34,  15 }, {  30,  20 }, {  22,  73 },
  1039.         {  20,  34 }, {  19,  31 }, {  27,  44 }, {  19,  16 },
  1040.         {  15,  36 }, {  15,  36 }, {  21,  28 }, {  25,  21 },
  1041.         {  30,  20 }, {  31,  12 }, {  27,  16 }, {  24,  42 },
  1042.         {   0,  93 }, {  14,  56 }, {  15,  57 }, {  26,  38 },
  1043.         { -24, 127 },
  1044.  
  1045.         /* 227 - 275 */
  1046.         { -24, 115 }, { -22,  82 }, {  -9,  62 }, {   0,  53 },
  1047.         {   0,  59 }, { -14,  85 }, { -13,  89 }, { -13,  94 },
  1048.         { -11,  92 }, { -29, 127 }, { -21, 100 }, { -14,  57 },
  1049.         { -12,  67 }, { -11,  71 }, { -10,  77 }, { -21,  85 },
  1050.         { -16,  88 }, { -23, 104 }, { -15,  98 }, { -37, 127 },
  1051.         { -10,  82 }, {  -8,  48 }, {  -8,  61 }, {  -8,  66 },
  1052.         {  -7,  70 }, { -14,  75 }, { -10,  79 }, {  -9,  83 },
  1053.         { -12,  92 }, { -18, 108 }, {  -4,  79 }, { -22,  69 },
  1054.         { -16,  75 }, {  -2,  58 }, {   1,  58 }, { -13,  78 },
  1055.         {  -9,  83 }, {  -4,  81 }, { -13,  99 }, { -13,  81 },
  1056.         {  -6,  38 }, { -13,  62 }, {  -6,  58 }, {  -2,  59 },
  1057.         { -16,  73 }, { -10,  76 }, { -13,  86 }, {  -9,  83 },
  1058.         { -10,  87 },
  1059.  
  1060.         /* 276 a bit special (not used, bypass is used instead) */
  1061.         { 0, 0 },
  1062.  
  1063.         /* 277 - 337 */
  1064.         { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
  1065.         { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
  1066.         { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
  1067.         { -10,  94 }, { -15, 102 }, { -10,  99 }, { -13, 106 },
  1068.         { -50, 127 }, {  -5,  92 }, {  17,  57 }, {  -5,  86 },
  1069.         { -13,  94 }, { -12,  91 }, {  -2,  77 }, {   0,  71 },
  1070.         {  -1,  73 }, {   4,  64 }, {  -7,  81 }, {   5,  64 },
  1071.         {  15,  57 }, {   1,  67 }, {   0,  68 }, { -10,  67 },
  1072.         {   1,  68 }, {   0,  77 }, {   2,  64 }, {   0,  68 },
  1073.         {  -5,  78 }, {   7,  55 }, {   5,  59 }, {   2,  65 },
  1074.         {  14,  54 }, {  15,  44 }, {   5,  60 }, {   2,  70 },
  1075.         {  -2,  76 }, { -18,  86 }, {  12,  70 }, {   5,  64 },
  1076.         { -12,  70 }, {  11,  55 }, {   5,  56 }, {   0,  69 },
  1077.         {   2,  65 }, {  -6,  74 }, {   5,  54 }, {   7,  54 },
  1078.         {  -6,  76 }, { -11,  82 }, {  -2,  77 }, {  -2,  77 },
  1079.         {  25,  42 },
  1080.  
  1081.         /* 338 - 398 */
  1082.         {  17, -13 }, {  16,  -9 }, {  17, -12 }, {  27, -21 },
  1083.         {  37, -30 }, {  41, -40 }, {  42, -41 }, {  48, -47 },
  1084.         {  39, -32 }, {  46, -40 }, {  52, -51 }, {  46, -41 },
  1085.         {  52, -39 }, {  43, -19 }, {  32,  11 }, {  61, -55 },
  1086.         {  56, -46 }, {  62, -50 }, {  81, -67 }, {  45, -20 },
  1087.         {  35,  -2 }, {  28,  15 }, {  34,   1 }, {  39,   1 },
  1088.         {  30,  17 }, {  20,  38 }, {  18,  45 }, {  15,  54 },
  1089.         {   0,  79 }, {  36, -16 }, {  37, -14 }, {  37, -17 },
  1090.         {  32,   1 }, {  34,  15 }, {  29,  15 }, {  24,  25 },
  1091.         {  34,  22 }, {  31,  16 }, {  35,  18 }, {  31,  28 },
  1092.         {  33,  41 }, {  36,  28 }, {  27,  47 }, {  21,  62 },
  1093.         {  18,  31 }, {  19,  26 }, {  36,  24 }, {  24,  23 },
  1094.         {  27,  16 }, {  24,  30 }, {  31,  29 }, {  22,  41 },
  1095.         {  22,  42 }, {  16,  60 }, {  15,  52 }, {  14,  60 },
  1096.         {   3,  78 }, { -16, 123 }, {  21,  53 }, {  22,  56 },
  1097.         {  25,  61 },
  1098.  
  1099.         /* 399 - 435 */
  1100.         {  21,  33 }, {  19,  50 }, {  17,  61 },
  1101.         {  -3,  78 }, {  -8,  74 }, {  -9,  72 }, { -10,  72 },
  1102.         { -18,  75 }, { -12,  71 }, { -11,  63 }, {  -5,  70 },
  1103.         { -17,  75 }, { -14,  72 }, { -16,  67 }, {  -8,  53 },
  1104.         { -14,  59 }, {  -9,  52 }, { -11,  68 }, {   9,  -2 },
  1105.         {  30, -10 }, {  31,  -4 }, {  33,  -1 }, {  33,   7 },
  1106.         {  31,  12 }, {  37,  23 }, {  31,  38 }, {  20,  64 },
  1107.         {  -9,  71 }, {  -7,  37 }, {  -8,  44 }, { -11,  49 },
  1108.         { -10,  56 }, { -12,  59 }, {  -8,  63 }, {  -9,  67 },
  1109.         {  -6,  68 }, { -10,  79 },
  1110.  
  1111.         /* 436 - 459 */
  1112.         {  -3,  78 }, {  -8,  74 }, {  -9,  72 }, { -10,  72 },
  1113.         { -18,  75 }, { -12,  71 }, { -11,  63 }, {  -5,  70 },
  1114.         { -17,  75 }, { -14,  72 }, { -16,  67 }, {  -8,  53 },
  1115.         { -14,  59 }, {  -9,  52 }, { -11,  68 }, {   9,  -2 },
  1116.         {  30, -10 }, {  31,  -4 }, {  33,  -1 }, {  33,   7 },
  1117.         {  31,  12 }, {  37,  23 }, {  31,  38 }, {  20,  64 },
  1118.  
  1119.         /* 460 - 1024 */
  1120.         {  11,  80 }, {   5,  76 }, {   2,  84 }, {   5,  78 },
  1121.         {  -6,  55 }, {   4,  61 }, { -14,  83 }, { -37, 127 },
  1122.         {  -5,  79 }, { -11, 104 }, { -11,  91 }, { -30, 127 },
  1123.         {  11,  80 }, {   5,  76 }, {   2,  84 }, {   5,  78 },
  1124.         {  -6,  55 }, {   4,  61 }, { -14,  83 }, { -37, 127 },
  1125.         {  -5,  79 }, { -11, 104 }, { -11,  91 }, { -30, 127 },
  1126.         {  -4,  86 }, { -12,  88 }, {  -5,  82 }, {  -3,  72 },
  1127.         {  -4,  67 }, {  -8,  72 }, { -16,  89 }, {  -9,  69 },
  1128.         {  -1,  59 }, {   5,  66 }, {   4,  57 }, {  -4,  71 },
  1129.         {  -2,  71 }, {   2,  58 }, {  -1,  74 }, {  -4,  44 },
  1130.         {  -1,  69 }, {   0,  62 }, {  -7,  51 }, {  -4,  47 },
  1131.         {  -6,  42 }, {  -3,  41 }, {  -6,  53 }, {   8,  76 },
  1132.         {  -9,  78 }, { -11,  83 }, {   9,  52 }, {   0,  67 },
  1133.         {  -5,  90 }, {   1,  67 }, { -15,  72 }, {  -5,  75 },
  1134.         {  -8,  80 }, { -21,  83 }, { -21,  64 }, { -13,  31 },
  1135.         { -25,  64 }, { -29,  94 }, {   9,  75 }, {  17,  63 },
  1136.         {  -8,  74 }, {  -5,  35 }, {  -2,  27 }, {  13,  91 },
  1137.         {  -4,  86 }, { -12,  88 }, {  -5,  82 }, {  -3,  72 },
  1138.         {  -4,  67 }, {  -8,  72 }, { -16,  89 }, {  -9,  69 },
  1139.         {  -1,  59 }, {   5,  66 }, {   4,  57 }, {  -4,  71 },
  1140.         {  -2,  71 }, {   2,  58 }, {  -1,  74 }, {  -4,  44 },
  1141.         {  -1,  69 }, {   0,  62 }, {  -7,  51 }, {  -4,  47 },
  1142.         {  -6,  42 }, {  -3,  41 }, {  -6,  53 }, {   8,  76 },
  1143.         {  -9,  78 }, { -11,  83 }, {   9,  52 }, {   0,  67 },
  1144.         {  -5,  90 }, {   1,  67 }, { -15,  72 }, {  -5,  75 },
  1145.         {  -8,  80 }, { -21,  83 }, { -21,  64 }, { -13,  31 },
  1146.         { -25,  64 }, { -29,  94 }, {   9,  75 }, {  17,  63 },
  1147.         {  -8,  74 }, {  -5,  35 }, {  -2,  27 }, {  13,  91 },
  1148.         {   4,  39 }, {   0,  42 }, {   7,  34 }, {  11,  29 },
  1149.         {   8,  31 }, {   6,  37 }, {   7,  42 }, {   3,  40 },
  1150.         {   8,  33 }, {  13,  43 }, {  13,  36 }, {   4,  47 },
  1151.         {   3,  55 }, {   2,  58 }, {   6,  60 }, {   8,  44 },
  1152.         {  11,  44 }, {  14,  42 }, {   7,  48 }, {   4,  56 },
  1153.         {   4,  52 }, {  13,  37 }, {   9,  49 }, {  19,  58 },
  1154.         {  10,  48 }, {  12,  45 }, {   0,  69 }, {  20,  33 },
  1155.         {   8,  63 }, {  35, -18 }, {  33, -25 }, {  28,  -3 },
  1156.         {  24,  10 }, {  27,   0 }, {  34, -14 }, {  52, -44 },
  1157.         {  39, -24 }, {  19,  17 }, {  31,  25 }, {  36,  29 },
  1158.         {  24,  33 }, {  34,  15 }, {  30,  20 }, {  22,  73 },
  1159.         {   4,  39 }, {   0,  42 }, {   7,  34 }, {  11,  29 },
  1160.         {   8,  31 }, {   6,  37 }, {   7,  42 }, {   3,  40 },
  1161.         {   8,  33 }, {  13,  43 }, {  13,  36 }, {   4,  47 },
  1162.         {   3,  55 }, {   2,  58 }, {   6,  60 }, {   8,  44 },
  1163.         {  11,  44 }, {  14,  42 }, {   7,  48 }, {   4,  56 },
  1164.         {   4,  52 }, {  13,  37 }, {   9,  49 }, {  19,  58 },
  1165.         {  10,  48 }, {  12,  45 }, {   0,  69 }, {  20,  33 },
  1166.         {   8,  63 }, {  35, -18 }, {  33, -25 }, {  28,  -3 },
  1167.         {  24,  10 }, {  27,   0 }, {  34, -14 }, {  52, -44 },
  1168.         {  39, -24 }, {  19,  17 }, {  31,  25 }, {  36,  29 },
  1169.         {  24,  33 }, {  34,  15 }, {  30,  20 }, {  22,  73 },
  1170.         {  -3,  78 }, {  -8,  74 }, {  -9,  72 }, { -10,  72 },
  1171.         { -18,  75 }, { -12,  71 }, { -11,  63 }, {  -5,  70 },
  1172.         { -17,  75 }, { -14,  72 }, { -16,  67 }, {  -8,  53 },
  1173.         { -14,  59 }, {  -9,  52 }, { -11,  68 }, {  -3,  78 },
  1174.         {  -8,  74 }, {  -9,  72 }, { -10,  72 }, { -18,  75 },
  1175.         { -12,  71 }, { -11,  63 }, {  -5,  70 }, { -17,  75 },
  1176.         { -14,  72 }, { -16,  67 }, {  -8,  53 }, { -14,  59 },
  1177.         {  -9,  52 }, { -11,  68 }, {   9,  -2 }, {  30, -10 },
  1178.         {  31,  -4 }, {  33,  -1 }, {  33,   7 }, {  31,  12 },
  1179.         {  37,  23 }, {  31,  38 }, {  20,  64 }, {   9,  -2 },
  1180.         {  30, -10 }, {  31,  -4 }, {  33,  -1 }, {  33,   7 },
  1181.         {  31,  12 }, {  37,  23 }, {  31,  38 }, {  20,  64 },
  1182.         {  -9,  71 }, {  -7,  37 }, {  -8,  44 }, { -11,  49 },
  1183.         { -10,  56 }, { -12,  59 }, {  -8,  63 }, {  -9,  67 },
  1184.         {  -6,  68 }, { -10,  79 }, {  -3,  78 }, {  -8,  74 },
  1185.         {  -9,  72 }, { -10,  72 }, { -18,  75 }, { -12,  71 },
  1186.         { -11,  63 }, {  -5,  70 }, { -17,  75 }, { -14,  72 },
  1187.         { -16,  67 }, {  -8,  53 }, { -14,  59 }, {  -9,  52 },
  1188.         { -11,  68 }, {  -3,  78 }, {  -8,  74 }, {  -9,  72 },
  1189.         { -10,  72 }, { -18,  75 }, { -12,  71 }, { -11,  63 },
  1190.         {  -5,  70 }, { -17,  75 }, { -14,  72 }, { -16,  67 },
  1191.         {  -8,  53 }, { -14,  59 }, {  -9,  52 }, { -11,  68 },
  1192.         {   9,  -2 }, {  30, -10 }, {  31,  -4 }, {  33,  -1 },
  1193.         {  33,   7 }, {  31,  12 }, {  37,  23 }, {  31,  38 },
  1194.         {  20,  64 }, {   9,  -2 }, {  30, -10 }, {  31,  -4 },
  1195.         {  33,  -1 }, {  33,   7 }, {  31,  12 }, {  37,  23 },
  1196.         {  31,  38 }, {  20,  64 }, {  -9,  71 }, {  -7,  37 },
  1197.         {  -8,  44 }, { -11,  49 }, { -10,  56 }, { -12,  59 },
  1198.         {  -8,  63 }, {  -9,  67 }, {  -6,  68 }, { -10,  79 },
  1199.         { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
  1200.         { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
  1201.         { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
  1202.         { -10,  94 }, { -15, 102 }, { -10,  99 }, { -13, 106 },
  1203.         { -50, 127 }, {  -5,  92 }, {  17,  57 }, {  -5,  86 },
  1204.         { -13,  94 }, { -12,  91 }, {  -2,  77 }, {   0,  71 },
  1205.         {  -1,  73 }, {   4,  64 }, {  -7,  81 }, {   5,  64 },
  1206.         {  15,  57 }, {   1,  67 }, {   0,  68 }, { -10,  67 },
  1207.         {   1,  68 }, {   0,  77 }, {   2,  64 }, {   0,  68 },
  1208.         {  -5,  78 }, {   7,  55 }, {   5,  59 }, {   2,  65 },
  1209.         {  14,  54 }, {  15,  44 }, {   5,  60 }, {   2,  70 },
  1210.         { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 },
  1211.         { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 },
  1212.         { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 },
  1213.         { -10,  94 }, { -15, 102 }, { -10,  99 }, { -13, 106 },
  1214.         { -50, 127 }, {  -5,  92 }, {  17,  57 }, {  -5,  86 },
  1215.         { -13,  94 }, { -12,  91 }, {  -2,  77 }, {   0,  71 },
  1216.         {  -1,  73 }, {   4,  64 }, {  -7,  81 }, {   5,  64 },
  1217.         {  15,  57 }, {   1,  67 }, {   0,  68 }, { -10,  67 },
  1218.         {   1,  68 }, {   0,  77 }, {   2,  64 }, {   0,  68 },
  1219.         {  -5,  78 }, {   7,  55 }, {   5,  59 }, {   2,  65 },
  1220.         {  14,  54 }, {  15,  44 }, {   5,  60 }, {   2,  70 },
  1221.         {  17, -13 }, {  16,  -9 }, {  17, -12 }, {  27, -21 },
  1222.         {  37, -30 }, {  41, -40 }, {  42, -41 }, {  48, -47 },
  1223.         {  39, -32 }, {  46, -40 }, {  52, -51 }, {  46, -41 },
  1224.         {  52, -39 }, {  43, -19 }, {  32,  11 }, {  61, -55 },
  1225.         {  56, -46 }, {  62, -50 }, {  81, -67 }, {  45, -20 },
  1226.         {  35,  -2 }, {  28,  15 }, {  34,   1 }, {  39,   1 },
  1227.         {  30,  17 }, {  20,  38 }, {  18,  45 }, {  15,  54 },
  1228.         {   0,  79 }, {  36, -16 }, {  37, -14 }, {  37, -17 },
  1229.         {  32,   1 }, {  34,  15 }, {  29,  15 }, {  24,  25 },
  1230.         {  34,  22 }, {  31,  16 }, {  35,  18 }, {  31,  28 },
  1231.         {  33,  41 }, {  36,  28 }, {  27,  47 }, {  21,  62 },
  1232.         {  17, -13 }, {  16,  -9 }, {  17, -12 }, {  27, -21 },
  1233.         {  37, -30 }, {  41, -40 }, {  42, -41 }, {  48, -47 },
  1234.         {  39, -32 }, {  46, -40 }, {  52, -51 }, {  46, -41 },
  1235.         {  52, -39 }, {  43, -19 }, {  32,  11 }, {  61, -55 },
  1236.         {  56, -46 }, {  62, -50 }, {  81, -67 }, {  45, -20 },
  1237.         {  35,  -2 }, {  28,  15 }, {  34,   1 }, {  39,   1 },
  1238.         {  30,  17 }, {  20,  38 }, {  18,  45 }, {  15,  54 },
  1239.         {   0,  79 }, {  36, -16 }, {  37, -14 }, {  37, -17 },
  1240.         {  32,   1 }, {  34,  15 }, {  29,  15 }, {  24,  25 },
  1241.         {  34,  22 }, {  31,  16 }, {  35,  18 }, {  31,  28 },
  1242.         {  33,  41 }, {  36,  28 }, {  27,  47 }, {  21,  62 },
  1243.         { -24, 115 }, { -22,  82 }, {  -9,  62 }, {   0,  53 },
  1244.         {   0,  59 }, { -14,  85 }, { -13,  89 }, { -13,  94 },
  1245.         { -11,  92 }, { -29, 127 }, { -21, 100 }, { -14,  57 },
  1246.         { -12,  67 }, { -11,  71 }, { -10,  77 }, { -21,  85 },
  1247.         { -16,  88 }, { -23, 104 }, { -15,  98 }, { -37, 127 },
  1248.         { -10,  82 }, {  -8,  48 }, {  -8,  61 }, {  -8,  66 },
  1249.         {  -7,  70 }, { -14,  75 }, { -10,  79 }, {  -9,  83 },
  1250.         { -12,  92 }, { -18, 108 }, { -24, 115 }, { -22,  82 },
  1251.         {  -9,  62 }, {   0,  53 }, {   0,  59 }, { -14,  85 },
  1252.         { -13,  89 }, { -13,  94 }, { -11,  92 }, { -29, 127 },
  1253.         { -21, 100 }, { -14,  57 }, { -12,  67 }, { -11,  71 },
  1254.         { -10,  77 }, { -21,  85 }, { -16,  88 }, { -23, 104 },
  1255.         { -15,  98 }, { -37, 127 }, { -10,  82 }, {  -8,  48 },
  1256.         {  -8,  61 }, {  -8,  66 }, {  -7,  70 }, { -14,  75 },
  1257.         { -10,  79 }, {  -9,  83 }, { -12,  92 }, { -18, 108 },
  1258.         {  -5,  79 }, { -11, 104 }, { -11,  91 }, { -30, 127 },
  1259.         {  -5,  79 }, { -11, 104 }, { -11,  91 }, { -30, 127 },
  1260.         {  -5,  79 }, { -11, 104 }, { -11,  91 }, { -30, 127 }
  1261.     }
  1262. };
  1263.  
  1264. void ff_h264_init_cabac_states(const H264Context *h, H264SliceContext *sl)
  1265. {
  1266.     int i;
  1267.     const int8_t (*tab)[2];
  1268.     const int slice_qp = av_clip(sl->qscale - 6*(h->sps.bit_depth_luma-8), 0, 51);
  1269.  
  1270.     if (sl->slice_type_nos == AV_PICTURE_TYPE_I) tab = cabac_context_init_I;
  1271.     else                                 tab = cabac_context_init_PB[sl->cabac_init_idc];
  1272.  
  1273.     /* calculate pre-state */
  1274.     for( i= 0; i < 1024; i++ ) {
  1275.         int pre = 2*(((tab[i][0] * slice_qp) >>4 ) + tab[i][1]) - 127;
  1276.  
  1277.         pre^= pre>>31;
  1278.         if(pre > 124)
  1279.             pre= 124 + (pre&1);
  1280.  
  1281.         sl->cabac_state[i] =  pre;
  1282.     }
  1283. }
  1284.  
  1285. static int decode_cabac_field_decoding_flag(const H264Context *h, H264SliceContext *sl)
  1286. {
  1287.     const int mbb_xy = sl->mb_xy - 2*h->mb_stride;
  1288.  
  1289.     unsigned long ctx = 0;
  1290.  
  1291.     ctx += sl->mb_field_decoding_flag & !!sl->mb_x; //for FMO:(s->current_picture.mb_type[mba_xy] >> 7) & (h->slice_table[mba_xy] == h->slice_num);
  1292.     ctx += (h->cur_pic.mb_type[mbb_xy] >> 7) & (h->slice_table[mbb_xy] == sl->slice_num);
  1293.  
  1294.     return get_cabac_noinline( &sl->cabac, &(sl->cabac_state+70)[ctx] );
  1295. }
  1296.  
  1297. static int decode_cabac_intra_mb_type(H264SliceContext *sl,
  1298.                                       int ctx_base, int intra_slice)
  1299. {
  1300.     uint8_t *state= &sl->cabac_state[ctx_base];
  1301.     int mb_type;
  1302.  
  1303.     if(intra_slice){
  1304.         int ctx=0;
  1305.         if (sl->left_type[LTOP] & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
  1306.             ctx++;
  1307.         if (sl->top_type        & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM))
  1308.             ctx++;
  1309.         if( get_cabac_noinline( &sl->cabac, &state[ctx] ) == 0 )
  1310.             return 0;   /* I4x4 */
  1311.         state += 2;
  1312.     }else{
  1313.         if( get_cabac_noinline( &sl->cabac, state ) == 0 )
  1314.             return 0;   /* I4x4 */
  1315.     }
  1316.  
  1317.     if( get_cabac_terminate( &sl->cabac ) )
  1318.         return 25;  /* PCM */
  1319.  
  1320.     mb_type = 1; /* I16x16 */
  1321.     mb_type += 12 * get_cabac_noinline( &sl->cabac, &state[1] ); /* cbp_luma != 0 */
  1322.     if( get_cabac_noinline( &sl->cabac, &state[2] ) ) /* cbp_chroma */
  1323.         mb_type += 4 + 4 * get_cabac_noinline( &sl->cabac, &state[2+intra_slice] );
  1324.     mb_type += 2 * get_cabac_noinline( &sl->cabac, &state[3+intra_slice] );
  1325.     mb_type += 1 * get_cabac_noinline( &sl->cabac, &state[3+2*intra_slice] );
  1326.     return mb_type;
  1327. }
  1328.  
  1329. static int decode_cabac_mb_skip(const H264Context *h, H264SliceContext *sl,
  1330.                                 int mb_x, int mb_y)
  1331. {
  1332.     int mba_xy, mbb_xy;
  1333.     int ctx = 0;
  1334.  
  1335.     if (FRAME_MBAFF(h)) { //FIXME merge with the stuff in fill_caches?
  1336.         int mb_xy = mb_x + (mb_y&~1)*h->mb_stride;
  1337.         mba_xy = mb_xy - 1;
  1338.         if( (mb_y&1)
  1339.             && h->slice_table[mba_xy] == sl->slice_num
  1340.             && MB_FIELD(sl) == !!IS_INTERLACED( h->cur_pic.mb_type[mba_xy] ) )
  1341.             mba_xy += h->mb_stride;
  1342.         if (MB_FIELD(sl)) {
  1343.             mbb_xy = mb_xy - h->mb_stride;
  1344.             if( !(mb_y&1)
  1345.                 && h->slice_table[mbb_xy] == sl->slice_num
  1346.                 && IS_INTERLACED( h->cur_pic.mb_type[mbb_xy] ) )
  1347.                 mbb_xy -= h->mb_stride;
  1348.         }else
  1349.             mbb_xy = mb_x + (mb_y-1)*h->mb_stride;
  1350.     }else{
  1351.         int mb_xy = sl->mb_xy;
  1352.         mba_xy = mb_xy - 1;
  1353.         mbb_xy = mb_xy - (h->mb_stride << FIELD_PICTURE(h));
  1354.     }
  1355.  
  1356.     if( h->slice_table[mba_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mba_xy] ))
  1357.         ctx++;
  1358.     if( h->slice_table[mbb_xy] == sl->slice_num && !IS_SKIP(h->cur_pic.mb_type[mbb_xy] ))
  1359.         ctx++;
  1360.  
  1361.     if (sl->slice_type_nos == AV_PICTURE_TYPE_B)
  1362.         ctx += 13;
  1363.     return get_cabac_noinline( &sl->cabac, &sl->cabac_state[11+ctx] );
  1364. }
  1365.  
  1366. static int decode_cabac_mb_intra4x4_pred_mode(H264SliceContext *sl, int pred_mode)
  1367. {
  1368.     int mode = 0;
  1369.  
  1370.     if( get_cabac( &sl->cabac, &sl->cabac_state[68] ) )
  1371.         return pred_mode;
  1372.  
  1373.     mode += 1 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
  1374.     mode += 2 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
  1375.     mode += 4 * get_cabac( &sl->cabac, &sl->cabac_state[69] );
  1376.  
  1377.     return mode + ( mode >= pred_mode );
  1378. }
  1379.  
  1380. static int decode_cabac_mb_chroma_pre_mode(const H264Context *h, H264SliceContext *sl)
  1381. {
  1382.     const int mba_xy = sl->left_mb_xy[0];
  1383.     const int mbb_xy = sl->top_mb_xy;
  1384.  
  1385.     int ctx = 0;
  1386.  
  1387.     /* No need to test for IS_INTRA4x4 and IS_INTRA16x16, as we set chroma_pred_mode_table to 0 */
  1388.     if (sl->left_type[LTOP] && h->chroma_pred_mode_table[mba_xy] != 0)
  1389.         ctx++;
  1390.  
  1391.     if (sl->top_type        && h->chroma_pred_mode_table[mbb_xy] != 0)
  1392.         ctx++;
  1393.  
  1394.     if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+ctx] ) == 0 )
  1395.         return 0;
  1396.  
  1397.     if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
  1398.         return 1;
  1399.     if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[64+3] ) == 0 )
  1400.         return 2;
  1401.     else
  1402.         return 3;
  1403. }
  1404.  
  1405. static int decode_cabac_mb_cbp_luma(H264SliceContext *sl)
  1406. {
  1407.     int cbp_b, cbp_a, ctx, cbp = 0;
  1408.  
  1409.     cbp_a = sl->left_cbp;
  1410.     cbp_b = sl->top_cbp;
  1411.  
  1412.     ctx = !(cbp_a & 0x02) + 2 * !(cbp_b & 0x04);
  1413.     cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]);
  1414.     ctx = !(cbp   & 0x01) + 2 * !(cbp_b & 0x08);
  1415.     cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 1;
  1416.     ctx = !(cbp_a & 0x08) + 2 * !(cbp   & 0x01);
  1417.     cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 2;
  1418.     ctx = !(cbp   & 0x04) + 2 * !(cbp   & 0x02);
  1419.     cbp += get_cabac_noinline(&sl->cabac, &sl->cabac_state[73 + ctx]) << 3;
  1420.     return cbp;
  1421. }
  1422. static int decode_cabac_mb_cbp_chroma(H264SliceContext *sl)
  1423. {
  1424.     int ctx;
  1425.     int cbp_a, cbp_b;
  1426.  
  1427.     cbp_a = (sl->left_cbp>>4)&0x03;
  1428.     cbp_b = (sl-> top_cbp>>4)&0x03;
  1429.  
  1430.     ctx = 0;
  1431.     if( cbp_a > 0 ) ctx++;
  1432.     if( cbp_b > 0 ) ctx += 2;
  1433.     if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] ) == 0 )
  1434.         return 0;
  1435.  
  1436.     ctx = 4;
  1437.     if( cbp_a == 2 ) ctx++;
  1438.     if( cbp_b == 2 ) ctx += 2;
  1439.     return 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[77 + ctx] );
  1440. }
  1441.  
  1442. static int decode_cabac_p_mb_sub_type(H264SliceContext *sl)
  1443. {
  1444.     if( get_cabac( &sl->cabac, &sl->cabac_state[21] ) )
  1445.         return 0;   /* 8x8 */
  1446.     if( !get_cabac( &sl->cabac, &sl->cabac_state[22] ) )
  1447.         return 1;   /* 8x4 */
  1448.     if( get_cabac( &sl->cabac, &sl->cabac_state[23] ) )
  1449.         return 2;   /* 4x8 */
  1450.     return 3;       /* 4x4 */
  1451. }
  1452. static int decode_cabac_b_mb_sub_type(H264SliceContext *sl)
  1453. {
  1454.     int type;
  1455.     if( !get_cabac( &sl->cabac, &sl->cabac_state[36] ) )
  1456.         return 0;   /* B_Direct_8x8 */
  1457.     if( !get_cabac( &sl->cabac, &sl->cabac_state[37] ) )
  1458.         return 1 + get_cabac( &sl->cabac, &sl->cabac_state[39] ); /* B_L0_8x8, B_L1_8x8 */
  1459.     type = 3;
  1460.     if( get_cabac( &sl->cabac, &sl->cabac_state[38] ) ) {
  1461.         if( get_cabac( &sl->cabac, &sl->cabac_state[39] ) )
  1462.             return 11 + get_cabac( &sl->cabac, &sl->cabac_state[39] ); /* B_L1_4x4, B_Bi_4x4 */
  1463.         type += 4;
  1464.     }
  1465.     type += 2*get_cabac( &sl->cabac, &sl->cabac_state[39] );
  1466.     type +=   get_cabac( &sl->cabac, &sl->cabac_state[39] );
  1467.     return type;
  1468. }
  1469.  
  1470. static int decode_cabac_mb_ref(H264SliceContext *sl, int list, int n)
  1471. {
  1472.     int refa = sl->ref_cache[list][scan8[n] - 1];
  1473.     int refb = sl->ref_cache[list][scan8[n] - 8];
  1474.     int ref  = 0;
  1475.     int ctx  = 0;
  1476.  
  1477.     if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
  1478.         if( refa > 0 && !(sl->direct_cache[scan8[n] - 1]&(MB_TYPE_DIRECT2>>1)) )
  1479.             ctx++;
  1480.         if( refb > 0 && !(sl->direct_cache[scan8[n] - 8]&(MB_TYPE_DIRECT2>>1)) )
  1481.             ctx += 2;
  1482.     } else {
  1483.         if( refa > 0 )
  1484.             ctx++;
  1485.         if( refb > 0 )
  1486.             ctx += 2;
  1487.     }
  1488.  
  1489.     while( get_cabac( &sl->cabac, &sl->cabac_state[54+ctx] ) ) {
  1490.         ref++;
  1491.         ctx = (ctx>>2)+4;
  1492.         if(ref >= 32 /*h->ref_list[list]*/){
  1493.             return -1;
  1494.         }
  1495.     }
  1496.     return ref;
  1497. }
  1498.  
  1499. static int decode_cabac_mb_mvd(H264SliceContext *sl, int ctxbase, int amvd, int *mvda)
  1500. {
  1501.     int mvd;
  1502.  
  1503.     if(!get_cabac(&sl->cabac, &sl->cabac_state[ctxbase+((amvd-3)>>(INT_BIT-1))+((amvd-33)>>(INT_BIT-1))+2])){
  1504. //    if(!get_cabac(&sl->cabac, &sl->cabac_state[ctxbase+(amvd>2)+(amvd>32)])){
  1505.         *mvda= 0;
  1506.         return 0;
  1507.     }
  1508.  
  1509.     mvd= 1;
  1510.     ctxbase+= 3;
  1511.     while( mvd < 9 && get_cabac( &sl->cabac, &sl->cabac_state[ctxbase] ) ) {
  1512.         if( mvd < 4 )
  1513.             ctxbase++;
  1514.         mvd++;
  1515.     }
  1516.  
  1517.     if( mvd >= 9 ) {
  1518.         int k = 3;
  1519.         while( get_cabac_bypass( &sl->cabac ) ) {
  1520.             mvd += 1 << k;
  1521.             k++;
  1522.             if(k>24){
  1523.                 av_log(sl->h264->avctx, AV_LOG_ERROR, "overflow in decode_cabac_mb_mvd\n");
  1524.                 return INT_MIN;
  1525.             }
  1526.         }
  1527.         while( k-- ) {
  1528.             mvd += get_cabac_bypass( &sl->cabac )<<k;
  1529.         }
  1530.         *mvda=mvd < 70 ? mvd : 70;
  1531.     }else
  1532.         *mvda=mvd;
  1533.     return get_cabac_bypass_sign( &sl->cabac, -mvd );
  1534. }
  1535.  
  1536. #define DECODE_CABAC_MB_MVD(sl, list,  n )\
  1537. {\
  1538.     int amvd0 = sl->mvd_cache[list][scan8[n] - 1][0] +\
  1539.                 sl->mvd_cache[list][scan8[n] - 8][0];\
  1540.     int amvd1 = sl->mvd_cache[list][scan8[n] - 1][1] +\
  1541.                 sl->mvd_cache[list][scan8[n] - 8][1];\
  1542. \
  1543.     mx += decode_cabac_mb_mvd(sl, 40, amvd0, &mpx);\
  1544.     my += decode_cabac_mb_mvd(sl, 47, amvd1, &mpy);\
  1545. }
  1546.  
  1547. static av_always_inline int get_cabac_cbf_ctx(H264SliceContext *sl,
  1548.                                               int cat, int idx, int max_coeff,
  1549.                                               int is_dc)
  1550. {
  1551.     int nza, nzb;
  1552.     int ctx = 0;
  1553.     static const uint16_t base_ctx[14] = {85,89,93,97,101,1012,460,464,468,1016,472,476,480,1020};
  1554.  
  1555.     if( is_dc ) {
  1556.         if( cat == 3 ) {
  1557.             idx -= CHROMA_DC_BLOCK_INDEX;
  1558.             nza = (sl->left_cbp>>(6+idx))&0x01;
  1559.             nzb = (sl-> top_cbp>>(6+idx))&0x01;
  1560.         } else {
  1561.             idx -= LUMA_DC_BLOCK_INDEX;
  1562.             nza = sl->left_cbp&(0x100<<idx);
  1563.             nzb = sl-> top_cbp&(0x100<<idx);
  1564.         }
  1565.     } else {
  1566.         nza = sl->non_zero_count_cache[scan8[idx] - 1];
  1567.         nzb = sl->non_zero_count_cache[scan8[idx] - 8];
  1568.     }
  1569.  
  1570.     if( nza > 0 )
  1571.         ctx++;
  1572.  
  1573.     if( nzb > 0 )
  1574.         ctx += 2;
  1575.  
  1576.     return base_ctx[cat] + ctx;
  1577. }
  1578.  
  1579. static av_always_inline void
  1580. decode_cabac_residual_internal(const H264Context *h, H264SliceContext *sl,
  1581.                                int16_t *block,
  1582.                                int cat, int n, const uint8_t *scantable,
  1583.                                const uint32_t *qmul, int max_coeff,
  1584.                                int is_dc, int chroma422)
  1585. {
  1586.     static const int significant_coeff_flag_offset[2][14] = {
  1587.       { 105+0, 105+15, 105+29, 105+44, 105+47, 402, 484+0, 484+15, 484+29, 660, 528+0, 528+15, 528+29, 718 },
  1588.       { 277+0, 277+15, 277+29, 277+44, 277+47, 436, 776+0, 776+15, 776+29, 675, 820+0, 820+15, 820+29, 733 }
  1589.     };
  1590.     static const int last_coeff_flag_offset[2][14] = {
  1591.       { 166+0, 166+15, 166+29, 166+44, 166+47, 417, 572+0, 572+15, 572+29, 690, 616+0, 616+15, 616+29, 748 },
  1592.       { 338+0, 338+15, 338+29, 338+44, 338+47, 451, 864+0, 864+15, 864+29, 699, 908+0, 908+15, 908+29, 757 }
  1593.     };
  1594.     static const int coeff_abs_level_m1_offset[14] = {
  1595.         227+0, 227+10, 227+20, 227+30, 227+39, 426, 952+0, 952+10, 952+20, 708, 982+0, 982+10, 982+20, 766
  1596.     };
  1597.     static const uint8_t significant_coeff_flag_offset_8x8[2][63] = {
  1598.       { 0, 1, 2, 3, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 5, 5,
  1599.         4, 4, 4, 4, 3, 3, 6, 7, 7, 7, 8, 9,10, 9, 8, 7,
  1600.         7, 6,11,12,13,11, 6, 7, 8, 9,14,10, 9, 8, 6,11,
  1601.        12,13,11, 6, 9,14,10, 9,11,12,13,11,14,10,12 },
  1602.       { 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 4, 5,
  1603.         6, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,11,12,11,
  1604.         9, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,13,13, 9,
  1605.         9,10,10, 8,13,13, 9, 9,10,10,14,14,14,14,14 }
  1606.     };
  1607.     static const uint8_t sig_coeff_offset_dc[7] = { 0, 0, 1, 1, 2, 2, 2 };
  1608.     /* node ctx: 0..3: abslevel1 (with abslevelgt1 == 0).
  1609.      * 4..7: abslevelgt1 + 3 (and abslevel1 doesn't matter).
  1610.      * map node ctx => cabac ctx for level=1 */
  1611.     static const uint8_t coeff_abs_level1_ctx[8] = { 1, 2, 3, 4, 0, 0, 0, 0 };
  1612.     /* map node ctx => cabac ctx for level>1 */
  1613.     static const uint8_t coeff_abs_levelgt1_ctx[2][8] = {
  1614.         { 5, 5, 5, 5, 6, 7, 8, 9 },
  1615.         { 5, 5, 5, 5, 6, 7, 8, 8 }, // 422/dc case
  1616.     };
  1617.     static const uint8_t coeff_abs_level_transition[2][8] = {
  1618.     /* update node ctx after decoding a level=1 */
  1619.         { 1, 2, 3, 3, 4, 5, 6, 7 },
  1620.     /* update node ctx after decoding a level>1 */
  1621.         { 4, 4, 4, 4, 5, 6, 7, 7 }
  1622.     };
  1623.  
  1624.     int index[64];
  1625.  
  1626.     int last;
  1627.     int coeff_count = 0;
  1628.     int node_ctx = 0;
  1629.  
  1630.     uint8_t *significant_coeff_ctx_base;
  1631.     uint8_t *last_coeff_ctx_base;
  1632.     uint8_t *abs_level_m1_ctx_base;
  1633.  
  1634. #if !ARCH_X86
  1635. #define CABAC_ON_STACK
  1636. #endif
  1637. #ifdef CABAC_ON_STACK
  1638. #define CC &cc
  1639.     CABACContext cc;
  1640.     cc.range     = sl->cabac.range;
  1641.     cc.low       = sl->cabac.low;
  1642.     cc.bytestream= sl->cabac.bytestream;
  1643. #if !UNCHECKED_BITSTREAM_READER || ARCH_AARCH64
  1644.     cc.bytestream_end = sl->cabac.bytestream_end;
  1645. #endif
  1646. #else
  1647. #define CC &sl->cabac
  1648. #endif
  1649.  
  1650.     significant_coeff_ctx_base = sl->cabac_state
  1651.         + significant_coeff_flag_offset[MB_FIELD(sl)][cat];
  1652.     last_coeff_ctx_base = sl->cabac_state
  1653.         + last_coeff_flag_offset[MB_FIELD(sl)][cat];
  1654.     abs_level_m1_ctx_base = sl->cabac_state
  1655.         + coeff_abs_level_m1_offset[cat];
  1656.  
  1657.     if( !is_dc && max_coeff == 64 ) {
  1658. #define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \
  1659.         for(last= 0; last < coefs; last++) { \
  1660.             uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \
  1661.             if( get_cabac( CC, sig_ctx )) { \
  1662.                 uint8_t *last_ctx = last_coeff_ctx_base + last_off; \
  1663.                 index[coeff_count++] = last; \
  1664.                 if( get_cabac( CC, last_ctx ) ) { \
  1665.                     last= max_coeff; \
  1666.                     break; \
  1667.                 } \
  1668.             } \
  1669.         }\
  1670.         if( last == max_coeff -1 ) {\
  1671.             index[coeff_count++] = last;\
  1672.         }
  1673.         const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD(sl)];
  1674. #ifdef decode_significance
  1675.         coeff_count = decode_significance_8x8(CC, significant_coeff_ctx_base, index,
  1676.                                                  last_coeff_ctx_base, sig_off);
  1677.     } else {
  1678.         if (is_dc && chroma422) { // dc 422
  1679.             DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
  1680.         } else {
  1681.             coeff_count = decode_significance(CC, max_coeff, significant_coeff_ctx_base, index,
  1682.                                                  last_coeff_ctx_base-significant_coeff_ctx_base);
  1683.         }
  1684. #else
  1685.         DECODE_SIGNIFICANCE( 63, sig_off[last], ff_h264_last_coeff_flag_offset_8x8[last] );
  1686.     } else {
  1687.         if (is_dc && chroma422) { // dc 422
  1688.             DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
  1689.         } else {
  1690.             DECODE_SIGNIFICANCE(max_coeff - 1, last, last);
  1691.         }
  1692. #endif
  1693.     }
  1694.     av_assert2(coeff_count > 0);
  1695.  
  1696.     if( is_dc ) {
  1697.         if( cat == 3 )
  1698.             h->cbp_table[sl->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
  1699.         else
  1700.             h->cbp_table[sl->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
  1701.         sl->non_zero_count_cache[scan8[n]] = coeff_count;
  1702.     } else {
  1703.         if( max_coeff == 64 )
  1704.             fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1);
  1705.         else {
  1706.             av_assert2( cat == 1 || cat ==  2 || cat ==  4 || cat == 7 || cat == 8 || cat == 11 || cat == 12 );
  1707.             sl->non_zero_count_cache[scan8[n]] = coeff_count;
  1708.         }
  1709.     }
  1710.  
  1711. #define STORE_BLOCK(type) \
  1712.     do { \
  1713.         uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; \
  1714.  \
  1715.         int j= scantable[index[--coeff_count]]; \
  1716.  \
  1717.         if( get_cabac( CC, ctx ) == 0 ) { \
  1718.             node_ctx = coeff_abs_level_transition[0][node_ctx]; \
  1719.             if( is_dc ) { \
  1720.                 ((type*)block)[j] = get_cabac_bypass_sign( CC, -1); \
  1721.             }else{ \
  1722.                 ((type*)block)[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; \
  1723.             } \
  1724.         } else { \
  1725.             int coeff_abs = 2; \
  1726.             ctx = coeff_abs_levelgt1_ctx[is_dc && chroma422][node_ctx] + abs_level_m1_ctx_base; \
  1727.             node_ctx = coeff_abs_level_transition[1][node_ctx]; \
  1728. \
  1729.             while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { \
  1730.                 coeff_abs++; \
  1731.             } \
  1732. \
  1733.             if( coeff_abs >= 15 ) { \
  1734.                 int j = 0; \
  1735.                 while (get_cabac_bypass(CC) && j < 30) { \
  1736.                     j++; \
  1737.                 } \
  1738. \
  1739.                 coeff_abs=1; \
  1740.                 while( j-- ) { \
  1741.                     coeff_abs += coeff_abs + get_cabac_bypass( CC ); \
  1742.                 } \
  1743.                 coeff_abs+= 14; \
  1744.             } \
  1745. \
  1746.             if( is_dc ) { \
  1747.                 ((type*)block)[j] = get_cabac_bypass_sign( CC, -coeff_abs ); \
  1748.             }else{ \
  1749.                 ((type*)block)[j] = ((int)(get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32)) >> 6; \
  1750.             } \
  1751.         } \
  1752.     } while ( coeff_count );
  1753.  
  1754.     if (h->pixel_shift) {
  1755.         STORE_BLOCK(int32_t)
  1756.     } else {
  1757.         STORE_BLOCK(int16_t)
  1758.     }
  1759. #ifdef CABAC_ON_STACK
  1760.             sl->cabac.range     = cc.range     ;
  1761.             sl->cabac.low       = cc.low       ;
  1762.             sl->cabac.bytestream= cc.bytestream;
  1763. #endif
  1764.  
  1765. }
  1766.  
  1767. static av_noinline void decode_cabac_residual_dc_internal(const H264Context *h,
  1768.                                                           H264SliceContext *sl,
  1769.                                                           int16_t *block,
  1770.                                                           int cat, int n,
  1771.                                                           const uint8_t *scantable,
  1772.                                                           int max_coeff)
  1773. {
  1774.     decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 0);
  1775. }
  1776.  
  1777. static av_noinline void decode_cabac_residual_dc_internal_422(const H264Context *h,
  1778.                                                               H264SliceContext *sl,
  1779.                                                               int16_t *block,
  1780.                                                               int cat, int n,
  1781.                                                               const uint8_t *scantable,
  1782.                                                               int max_coeff)
  1783. {
  1784.     decode_cabac_residual_internal(h, sl, block, cat, n, scantable, NULL, max_coeff, 1, 1);
  1785. }
  1786.  
  1787. static av_noinline void decode_cabac_residual_nondc_internal(const H264Context *h,
  1788.                                                              H264SliceContext *sl,
  1789.                                                              int16_t *block,
  1790.                                                              int cat, int n,
  1791.                                                              const uint8_t *scantable,
  1792.                                                              const uint32_t *qmul,
  1793.                                                              int max_coeff)
  1794. {
  1795.     decode_cabac_residual_internal(h, sl, block, cat, n, scantable, qmul, max_coeff, 0, 0);
  1796. }
  1797.  
  1798. /* cat: 0-> DC 16x16  n = 0
  1799.  *      1-> AC 16x16  n = luma4x4idx
  1800.  *      2-> Luma4x4   n = luma4x4idx
  1801.  *      3-> DC Chroma n = iCbCr
  1802.  *      4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx
  1803.  *      5-> Luma8x8   n = 4 * luma8x8idx */
  1804.  
  1805. /* Partially inline the CABAC residual decode: inline the coded block flag.
  1806.  * This has very little impact on binary size and improves performance
  1807.  * because it allows improved constant propagation into get_cabac_cbf_ctx,
  1808.  * as well as because most blocks have zero CBFs. */
  1809.  
  1810. static av_always_inline void decode_cabac_residual_dc(const H264Context *h,
  1811.                                                       H264SliceContext *sl,
  1812.                                                       int16_t *block,
  1813.                                                       int cat, int n,
  1814.                                                       const uint8_t *scantable,
  1815.                                                       int max_coeff)
  1816. {
  1817.     /* read coded block flag */
  1818.     if( get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0 ) {
  1819.         sl->non_zero_count_cache[scan8[n]] = 0;
  1820.         return;
  1821.     }
  1822.     decode_cabac_residual_dc_internal(h, sl, block, cat, n, scantable, max_coeff);
  1823. }
  1824.  
  1825. static av_always_inline void
  1826. decode_cabac_residual_dc_422(const H264Context *h, H264SliceContext *sl,
  1827.                              int16_t *block,
  1828.                              int cat, int n, const uint8_t *scantable,
  1829.                              int max_coeff)
  1830. {
  1831.     /* read coded block flag */
  1832.     if (get_cabac(&sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 1)]) == 0) {
  1833.         sl->non_zero_count_cache[scan8[n]] = 0;
  1834.         return;
  1835.     }
  1836.     decode_cabac_residual_dc_internal_422(h, sl, block, cat, n, scantable, max_coeff);
  1837. }
  1838.  
  1839. static av_always_inline void decode_cabac_residual_nondc(const H264Context *h,
  1840.                                                          H264SliceContext *sl,
  1841.                                                          int16_t *block,
  1842.                                                          int cat, int n,
  1843.                                                          const uint8_t *scantable,
  1844.                                                          const uint32_t *qmul,
  1845.                                                          int max_coeff)
  1846. {
  1847.     /* read coded block flag */
  1848.     if( (cat != 5 || CHROMA444(h)) && get_cabac( &sl->cabac, &sl->cabac_state[get_cabac_cbf_ctx(sl, cat, n, max_coeff, 0)]) == 0) {
  1849.         if( max_coeff == 64 ) {
  1850.             fill_rectangle(&sl->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
  1851.         } else {
  1852.             sl->non_zero_count_cache[scan8[n]] = 0;
  1853.         }
  1854.         return;
  1855.     }
  1856.     decode_cabac_residual_nondc_internal(h, sl, block, cat, n, scantable, qmul, max_coeff);
  1857. }
  1858.  
  1859. static av_always_inline void decode_cabac_luma_residual(const H264Context *h, H264SliceContext *sl,
  1860.                                                         const uint8_t *scan, const uint8_t *scan8x8,
  1861.                                                         int pixel_shift, int mb_type, int cbp, int p)
  1862. {
  1863.     static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}};
  1864.     const uint32_t *qmul;
  1865.     int i8x8, i4x4;
  1866.     int qscale = p == 0 ? sl->qscale : sl->chroma_qp[p - 1];
  1867.     if( IS_INTRA16x16( mb_type ) ) {
  1868.         AV_ZERO128(sl->mb_luma_dc[p]+0);
  1869.         AV_ZERO128(sl->mb_luma_dc[p]+8);
  1870.         AV_ZERO128(sl->mb_luma_dc[p]+16);
  1871.         AV_ZERO128(sl->mb_luma_dc[p]+24);
  1872.         decode_cabac_residual_dc(h, sl, sl->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
  1873.  
  1874.         if( cbp&15 ) {
  1875.             qmul = h->dequant4_coeff[p][qscale];
  1876.             for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
  1877.                 const int index = 16*p + i4x4;
  1878.                 decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15);
  1879.             }
  1880.         } else {
  1881.             fill_rectangle(&sl->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
  1882.         }
  1883.     } else {
  1884.         int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
  1885.         for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
  1886.             if( cbp & (1<<i8x8) ) {
  1887.                 if( IS_8x8DCT(mb_type) ) {
  1888.                     const int index = 16*p + 4*i8x8;
  1889.                     decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
  1890.                                                 scan8x8, h->dequant8_coeff[cqm][qscale], 64);
  1891.                 } else {
  1892.                     qmul = h->dequant4_coeff[cqm][qscale];
  1893.                     for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
  1894.                         const int index = 16*p + 4*i8x8 + i4x4;
  1895. //START_TIMER
  1896.                         decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16);
  1897. //STOP_TIMER("decode_residual")
  1898.                     }
  1899.                 }
  1900.             } else {
  1901.                 fill_rectangle(&sl->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
  1902.             }
  1903.         }
  1904.     }
  1905. }
  1906.  
  1907. /**
  1908.  * Decode a macroblock.
  1909.  * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed
  1910.  */
  1911. int ff_h264_decode_mb_cabac(const H264Context *h, H264SliceContext *sl)
  1912. {
  1913.     int mb_xy;
  1914.     int mb_type, partition_count, cbp = 0;
  1915.     int dct8x8_allowed= h->pps.transform_8x8_mode;
  1916.     int decode_chroma = h->sps.chroma_format_idc == 1 || h->sps.chroma_format_idc == 2;
  1917.     const int pixel_shift = h->pixel_shift;
  1918.  
  1919.     mb_xy = sl->mb_xy = sl->mb_x + sl->mb_y*h->mb_stride;
  1920.  
  1921.     ff_tlog(h->avctx, "pic:%d mb:%d/%d\n", h->frame_num, sl->mb_x, sl->mb_y);
  1922.     if (sl->slice_type_nos != AV_PICTURE_TYPE_I) {
  1923.         int skip;
  1924.         /* a skipped mb needs the aff flag from the following mb */
  1925.         if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 1 && sl->prev_mb_skipped)
  1926.             skip = sl->next_mb_skipped;
  1927.         else
  1928.             skip = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y );
  1929.         /* read skip flags */
  1930.         if( skip ) {
  1931.             if (FRAME_MBAFF(h) && (sl->mb_y & 1) == 0) {
  1932.                 h->cur_pic.mb_type[mb_xy] = MB_TYPE_SKIP;
  1933.                 sl->next_mb_skipped = decode_cabac_mb_skip(h, sl, sl->mb_x, sl->mb_y+1 );
  1934.                 if(!sl->next_mb_skipped)
  1935.                     sl->mb_mbaff = sl->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
  1936.             }
  1937.  
  1938.             decode_mb_skip(h, sl);
  1939.  
  1940.             h->cbp_table[mb_xy] = 0;
  1941.             h->chroma_pred_mode_table[mb_xy] = 0;
  1942.             sl->last_qscale_diff = 0;
  1943.  
  1944.             return 0;
  1945.  
  1946.         }
  1947.     }
  1948.     if (FRAME_MBAFF(h)) {
  1949.         if ((sl->mb_y & 1) == 0)
  1950.             sl->mb_mbaff =
  1951.             sl->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h, sl);
  1952.     }
  1953.  
  1954.     sl->prev_mb_skipped = 0;
  1955.  
  1956.     fill_decode_neighbors(h, sl, -(MB_FIELD(sl)));
  1957.  
  1958.     if (sl->slice_type_nos == AV_PICTURE_TYPE_B) {
  1959.         int ctx = 0;
  1960.         av_assert2(sl->slice_type_nos == AV_PICTURE_TYPE_B);
  1961.  
  1962.         if (!IS_DIRECT(sl->left_type[LTOP] - 1))
  1963.             ctx++;
  1964.         if (!IS_DIRECT(sl->top_type - 1))
  1965.             ctx++;
  1966.  
  1967.         if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+ctx] ) ){
  1968.             mb_type= 0; /* B_Direct_16x16 */
  1969.         }else if( !get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+3] ) ) {
  1970.             mb_type= 1 + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ); /* B_L[01]_16x16 */
  1971.         }else{
  1972.             int bits;
  1973.             bits = get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+4] ) << 3;
  1974.             bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 2;
  1975.             bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] ) << 1;
  1976.             bits+= get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
  1977.             if( bits < 8 ){
  1978.                 mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */
  1979.             }else if( bits == 13 ){
  1980.                 mb_type = decode_cabac_intra_mb_type(sl, 32, 0);
  1981.                 goto decode_intra_mb;
  1982.             }else if( bits == 14 ){
  1983.                 mb_type= 11; /* B_L1_L0_8x16 */
  1984.             }else if( bits == 15 ){
  1985.                 mb_type= 22; /* B_8x8 */
  1986.             }else{
  1987.                 bits= ( bits<<1 ) + get_cabac_noinline( &sl->cabac, &sl->cabac_state[27+5] );
  1988.                 mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
  1989.             }
  1990.         }
  1991.             partition_count= b_mb_type_info[mb_type].partition_count;
  1992.             mb_type=         b_mb_type_info[mb_type].type;
  1993.     } else if (sl->slice_type_nos == AV_PICTURE_TYPE_P) {
  1994.         if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[14] ) == 0 ) {
  1995.             /* P-type */
  1996.             if( get_cabac_noinline( &sl->cabac, &sl->cabac_state[15] ) == 0 ) {
  1997.                 /* P_L0_D16x16, P_8x8 */
  1998.                 mb_type= 3 * get_cabac_noinline( &sl->cabac, &sl->cabac_state[16] );
  1999.             } else {
  2000.                 /* P_L0_D8x16, P_L0_D16x8 */
  2001.                 mb_type= 2 - get_cabac_noinline( &sl->cabac, &sl->cabac_state[17] );
  2002.             }
  2003.             partition_count= p_mb_type_info[mb_type].partition_count;
  2004.             mb_type=         p_mb_type_info[mb_type].type;
  2005.         } else {
  2006.             mb_type = decode_cabac_intra_mb_type(sl, 17, 0);
  2007.             goto decode_intra_mb;
  2008.         }
  2009.     } else {
  2010.         mb_type = decode_cabac_intra_mb_type(sl, 3, 1);
  2011.         if (sl->slice_type == AV_PICTURE_TYPE_SI && mb_type)
  2012.             mb_type--;
  2013.         av_assert2(sl->slice_type_nos == AV_PICTURE_TYPE_I);
  2014. decode_intra_mb:
  2015.         partition_count = 0;
  2016.         cbp= i_mb_type_info[mb_type].cbp;
  2017.         sl->intra16x16_pred_mode = i_mb_type_info[mb_type].pred_mode;
  2018.         mb_type= i_mb_type_info[mb_type].type;
  2019.     }
  2020.     if (MB_FIELD(sl))
  2021.         mb_type |= MB_TYPE_INTERLACED;
  2022.  
  2023.     h->slice_table[mb_xy] = sl->slice_num;
  2024.  
  2025.     if(IS_INTRA_PCM(mb_type)) {
  2026.         const int mb_size = ff_h264_mb_sizes[h->sps.chroma_format_idc] *
  2027.                             h->sps.bit_depth_luma >> 3;
  2028.         const uint8_t *ptr;
  2029.         int ret;
  2030.  
  2031.         // We assume these blocks are very rare so we do not optimize it.
  2032.         // FIXME The two following lines get the bitstream position in the cabac
  2033.         // decode, I think it should be done by a function in cabac.h (or cabac.c).
  2034.         ptr= sl->cabac.bytestream;
  2035.         if(sl->cabac.low&0x1) ptr--;
  2036.         if(CABAC_BITS==16){
  2037.             if(sl->cabac.low&0x1FF) ptr--;
  2038.         }
  2039.  
  2040.         // The pixels are stored in the same order as levels in h->mb array.
  2041.         if ((int) (sl->cabac.bytestream_end - ptr) < mb_size)
  2042.             return -1;
  2043.         sl->intra_pcm_ptr = ptr;
  2044.         ptr += mb_size;
  2045.  
  2046.         ret = ff_init_cabac_decoder(&sl->cabac, ptr, sl->cabac.bytestream_end - ptr);
  2047.         if (ret < 0)
  2048.             return ret;
  2049.  
  2050.         // All blocks are present
  2051.         h->cbp_table[mb_xy] = 0xf7ef;
  2052.         h->chroma_pred_mode_table[mb_xy] = 0;
  2053.         // In deblocking, the quantizer is 0
  2054.         h->cur_pic.qscale_table[mb_xy] = 0;
  2055.         // All coeffs are present
  2056.         memset(h->non_zero_count[mb_xy], 16, 48);
  2057.         h->cur_pic.mb_type[mb_xy] = mb_type;
  2058.         sl->last_qscale_diff = 0;
  2059.         return 0;
  2060.     }
  2061.  
  2062.     fill_decode_caches(h, sl, mb_type);
  2063.  
  2064.     if( IS_INTRA( mb_type ) ) {
  2065.         int i, pred_mode;
  2066.         if( IS_INTRA4x4( mb_type ) ) {
  2067.             if (dct8x8_allowed && get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size])) {
  2068.                 mb_type |= MB_TYPE_8x8DCT;
  2069.                 for( i = 0; i < 16; i+=4 ) {
  2070.                     int pred = pred_intra_mode(h, sl, i);
  2071.                     int mode = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
  2072.                     fill_rectangle(&sl->intra4x4_pred_mode_cache[scan8[i]], 2, 2, 8, mode, 1);
  2073.                 }
  2074.             } else {
  2075.                 for( i = 0; i < 16; i++ ) {
  2076.                     int pred = pred_intra_mode(h, sl, i);
  2077.                     sl->intra4x4_pred_mode_cache[scan8[i]] = decode_cabac_mb_intra4x4_pred_mode(sl, pred);
  2078.  
  2079.                     ff_tlog(h->avctx, "i4x4 pred=%d mode=%d\n", pred,
  2080.                             sl->intra4x4_pred_mode_cache[scan8[i]]);
  2081.                 }
  2082.             }
  2083.             write_back_intra_pred_mode(h, sl);
  2084.             if (ff_h264_check_intra4x4_pred_mode(h, sl) < 0 ) return -1;
  2085.         } else {
  2086.             sl->intra16x16_pred_mode = ff_h264_check_intra_pred_mode(h, sl, sl->intra16x16_pred_mode, 0);
  2087.             if (sl->intra16x16_pred_mode < 0) return -1;
  2088.         }
  2089.         if(decode_chroma){
  2090.             h->chroma_pred_mode_table[mb_xy] =
  2091.             pred_mode                        = decode_cabac_mb_chroma_pre_mode(h, sl);
  2092.  
  2093.             pred_mode= ff_h264_check_intra_pred_mode(h, sl, pred_mode, 1 );
  2094.             if( pred_mode < 0 ) return -1;
  2095.             sl->chroma_pred_mode = pred_mode;
  2096.         } else {
  2097.             sl->chroma_pred_mode = DC_128_PRED8x8;
  2098.         }
  2099.     } else if( partition_count == 4 ) {
  2100.         int i, j, sub_partition_count[4], list, ref[2][4];
  2101.  
  2102.         if (sl->slice_type_nos == AV_PICTURE_TYPE_B ) {
  2103.             for( i = 0; i < 4; i++ ) {
  2104.                 sl->sub_mb_type[i] = decode_cabac_b_mb_sub_type(sl);
  2105.                 sub_partition_count[i] = b_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
  2106.                 sl->sub_mb_type[i]     = b_sub_mb_type_info[sl->sub_mb_type[i]].type;
  2107.             }
  2108.             if (IS_DIRECT(sl->sub_mb_type[0] | sl->sub_mb_type[1] |
  2109.                           sl->sub_mb_type[2] | sl->sub_mb_type[3])) {
  2110.                 ff_h264_pred_direct_motion(h, sl, &mb_type);
  2111.                 sl->ref_cache[0][scan8[4]] =
  2112.                 sl->ref_cache[1][scan8[4]] =
  2113.                 sl->ref_cache[0][scan8[12]] =
  2114.                 sl->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
  2115.                     for( i = 0; i < 4; i++ )
  2116.                         fill_rectangle(&sl->direct_cache[scan8[4*i]], 2, 2, 8, (sl->sub_mb_type[i] >> 1) & 0xFF, 1);
  2117.             }
  2118.         } else {
  2119.             for( i = 0; i < 4; i++ ) {
  2120.                 sl->sub_mb_type[i] = decode_cabac_p_mb_sub_type(sl);
  2121.                 sub_partition_count[i] = p_sub_mb_type_info[sl->sub_mb_type[i]].partition_count;
  2122.                 sl->sub_mb_type[i]     = p_sub_mb_type_info[sl->sub_mb_type[i]].type;
  2123.             }
  2124.         }
  2125.  
  2126.         for( list = 0; list < sl->list_count; list++ ) {
  2127.                 for( i = 0; i < 4; i++ ) {
  2128.                     if(IS_DIRECT(sl->sub_mb_type[i])) continue;
  2129.                     if(IS_DIR(sl->sub_mb_type[i], 0, list)){
  2130.                         unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
  2131.                         if (rc > 1) {
  2132.                             ref[list][i] = decode_cabac_mb_ref(sl, list, 4 * i);
  2133.                             if (ref[list][i] >= rc) {
  2134.                                 av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], rc);
  2135.                                 return -1;
  2136.                             }
  2137.                         }else
  2138.                             ref[list][i] = 0;
  2139.                     } else {
  2140.                         ref[list][i] = -1;
  2141.                     }
  2142.                     sl->ref_cache[list][scan8[4 * i] + 1] =
  2143.                     sl->ref_cache[list][scan8[4 * i] + 8] = sl->ref_cache[list][scan8[4 * i] + 9] = ref[list][i];
  2144.                 }
  2145.         }
  2146.  
  2147.         if(dct8x8_allowed)
  2148.             dct8x8_allowed = get_dct8x8_allowed(h, sl);
  2149.  
  2150.         for (list = 0; list < sl->list_count; list++) {
  2151.             for(i=0; i<4; i++){
  2152.                 sl->ref_cache[list][scan8[4 * i]] = sl->ref_cache[list][scan8[4 * i] + 1];
  2153.                 if(IS_DIRECT(sl->sub_mb_type[i])){
  2154.                     fill_rectangle(sl->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
  2155.                     continue;
  2156.                 }
  2157.  
  2158.                 if(IS_DIR(sl->sub_mb_type[i], 0, list) && !IS_DIRECT(sl->sub_mb_type[i])){
  2159.                     const int sub_mb_type= sl->sub_mb_type[i];
  2160.                     const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
  2161.                     for(j=0; j<sub_partition_count[i]; j++){
  2162.                         int mpx, mpy;
  2163.                         int mx, my;
  2164.                         const int index= 4*i + block_width*j;
  2165.                         int16_t (* mv_cache)[2] = &sl->mv_cache[list][ scan8[index] ];
  2166.                         uint8_t (* mvd_cache)[2]= &sl->mvd_cache[list][ scan8[index] ];
  2167.                         pred_motion(h, sl, index, block_width, list, sl->ref_cache[list][ scan8[index] ], &mx, &my);
  2168.                         DECODE_CABAC_MB_MVD(sl, list, index)
  2169.                         ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
  2170.  
  2171.                         if(IS_SUB_8X8(sub_mb_type)){
  2172.                             mv_cache[ 1 ][0]=
  2173.                             mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
  2174.                             mv_cache[ 1 ][1]=
  2175.                             mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
  2176.  
  2177.                             mvd_cache[ 1 ][0]=
  2178.                             mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
  2179.                             mvd_cache[ 1 ][1]=
  2180.                             mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
  2181.                         }else if(IS_SUB_8X4(sub_mb_type)){
  2182.                             mv_cache[ 1 ][0]= mx;
  2183.                             mv_cache[ 1 ][1]= my;
  2184.  
  2185.                             mvd_cache[ 1 ][0]=  mpx;
  2186.                             mvd_cache[ 1 ][1]= mpy;
  2187.                         }else if(IS_SUB_4X8(sub_mb_type)){
  2188.                             mv_cache[ 8 ][0]= mx;
  2189.                             mv_cache[ 8 ][1]= my;
  2190.  
  2191.                             mvd_cache[ 8 ][0]= mpx;
  2192.                             mvd_cache[ 8 ][1]= mpy;
  2193.                         }
  2194.                         mv_cache[ 0 ][0]= mx;
  2195.                         mv_cache[ 0 ][1]= my;
  2196.  
  2197.                         mvd_cache[ 0 ][0]= mpx;
  2198.                         mvd_cache[ 0 ][1]= mpy;
  2199.                     }
  2200.                 }else{
  2201.                     fill_rectangle(sl->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
  2202.                     fill_rectangle(sl->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
  2203.                 }
  2204.             }
  2205.         }
  2206.     } else if( IS_DIRECT(mb_type) ) {
  2207.         ff_h264_pred_direct_motion(h, sl, &mb_type);
  2208.         fill_rectangle(sl->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
  2209.         fill_rectangle(sl->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
  2210.         dct8x8_allowed &= h->sps.direct_8x8_inference_flag;
  2211.     } else {
  2212.         int list, i;
  2213.         if(IS_16X16(mb_type)){
  2214.             for (list = 0; list < sl->list_count; list++) {
  2215.                 if(IS_DIR(mb_type, 0, list)){
  2216.                     int ref;
  2217.                     unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
  2218.                     if (rc > 1) {
  2219.                         ref= decode_cabac_mb_ref(sl, list, 0);
  2220.                         if (ref >= rc) {
  2221.                             av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
  2222.                             return -1;
  2223.                         }
  2224.                     }else
  2225.                         ref=0;
  2226.                     fill_rectangle(&sl->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
  2227.                 }
  2228.             }
  2229.             for (list = 0; list < sl->list_count; list++) {
  2230.                 if(IS_DIR(mb_type, 0, list)){
  2231.                     int mx,my,mpx,mpy;
  2232.                     pred_motion(h, sl, 0, 4, list, sl->ref_cache[list][ scan8[0] ], &mx, &my);
  2233.                     DECODE_CABAC_MB_MVD(sl, list, 0)
  2234.                     ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
  2235.  
  2236.                     fill_rectangle(sl->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
  2237.                     fill_rectangle(sl->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
  2238.                 }
  2239.             }
  2240.         }
  2241.         else if(IS_16X8(mb_type)){
  2242.             for (list = 0; list < sl->list_count; list++) {
  2243.                     for(i=0; i<2; i++){
  2244.                         if(IS_DIR(mb_type, i, list)){
  2245.                             int ref;
  2246.                             unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
  2247.                             if (rc > 1) {
  2248.                                 ref= decode_cabac_mb_ref(sl, list, 8 * i);
  2249.                                 if (ref >= rc) {
  2250.                                     av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
  2251.                                     return -1;
  2252.                                 }
  2253.                             }else
  2254.                                 ref=0;
  2255.                             fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
  2256.                         }else
  2257.                             fill_rectangle(&sl->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
  2258.                     }
  2259.             }
  2260.             for (list = 0; list < sl->list_count; list++) {
  2261.                 for(i=0; i<2; i++){
  2262.                     if(IS_DIR(mb_type, i, list)){
  2263.                         int mx,my,mpx,mpy;
  2264.                         pred_16x8_motion(h, sl, 8*i, list, sl->ref_cache[list][scan8[0] + 16*i], &mx, &my);
  2265.                         DECODE_CABAC_MB_MVD(sl, list, 8*i)
  2266.                         ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
  2267.  
  2268.                         fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
  2269.                         fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
  2270.                     }else{
  2271.                         fill_rectangle(sl->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
  2272.                         fill_rectangle(sl->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
  2273.                     }
  2274.                 }
  2275.             }
  2276.         }else{
  2277.             av_assert2(IS_8X16(mb_type));
  2278.             for (list = 0; list < sl->list_count; list++) {
  2279.                     for(i=0; i<2; i++){
  2280.                         if(IS_DIR(mb_type, i, list)){ //FIXME optimize
  2281.                             int ref;
  2282.                             unsigned rc = sl->ref_count[list] << MB_MBAFF(sl);
  2283.                             if (rc > 1) {
  2284.                                 ref = decode_cabac_mb_ref(sl, list, 4 * i);
  2285.                                 if (ref >= rc) {
  2286.                                     av_log(h->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, rc);
  2287.                                     return -1;
  2288.                                 }
  2289.                             }else
  2290.                                 ref=0;
  2291.                             fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
  2292.                         }else
  2293.                             fill_rectangle(&sl->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
  2294.                     }
  2295.             }
  2296.             for (list = 0; list < sl->list_count; list++) {
  2297.                 for(i=0; i<2; i++){
  2298.                     if(IS_DIR(mb_type, i, list)){
  2299.                         int mx,my,mpx,mpy;
  2300.                         pred_8x16_motion(h, sl, i*4, list, sl->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
  2301.                         DECODE_CABAC_MB_MVD(sl, list, 4*i)
  2302.  
  2303.                         ff_tlog(h->avctx, "final mv:%d %d\n", mx, my);
  2304.                         fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
  2305.                         fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
  2306.                     }else{
  2307.                         fill_rectangle(sl->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
  2308.                         fill_rectangle(sl->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
  2309.                     }
  2310.                 }
  2311.             }
  2312.         }
  2313.     }
  2314.  
  2315.    if( IS_INTER( mb_type ) ) {
  2316.         h->chroma_pred_mode_table[mb_xy] = 0;
  2317.         write_back_motion(h, sl, mb_type);
  2318.    }
  2319.  
  2320.     if( !IS_INTRA16x16( mb_type ) ) {
  2321.         cbp  = decode_cabac_mb_cbp_luma(sl);
  2322.         if(decode_chroma)
  2323.             cbp |= decode_cabac_mb_cbp_chroma(sl) << 4;
  2324.     } else {
  2325.         if (!decode_chroma && cbp>15) {
  2326.             av_log(h->avctx, AV_LOG_ERROR, "gray chroma\n");
  2327.             return AVERROR_INVALIDDATA;
  2328.         }
  2329.     }
  2330.  
  2331.     h->cbp_table[mb_xy] = sl->cbp = cbp;
  2332.  
  2333.     if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
  2334.         mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline(&sl->cabac, &sl->cabac_state[399 + sl->neighbor_transform_size]);
  2335.     }
  2336.  
  2337.     /* It would be better to do this in fill_decode_caches, but we don't know
  2338.      * the transform mode of the current macroblock there. */
  2339.     if (CHROMA444(h) && IS_8x8DCT(mb_type)){
  2340.         int i;
  2341.         uint8_t *nnz_cache = sl->non_zero_count_cache;
  2342.         for (i = 0; i < 2; i++){
  2343.             if (sl->left_type[LEFT(i)] && !IS_8x8DCT(sl->left_type[LEFT(i)])) {
  2344.                 nnz_cache[3+8* 1 + 2*8*i]=
  2345.                 nnz_cache[3+8* 2 + 2*8*i]=
  2346.                 nnz_cache[3+8* 6 + 2*8*i]=
  2347.                 nnz_cache[3+8* 7 + 2*8*i]=
  2348.                 nnz_cache[3+8*11 + 2*8*i]=
  2349.                 nnz_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0;
  2350.             }
  2351.         }
  2352.         if (sl->top_type && !IS_8x8DCT(sl->top_type)){
  2353.             uint32_t top_empty = CABAC(h) && !IS_INTRA(mb_type) ? 0 : 0x40404040;
  2354.             AV_WN32A(&nnz_cache[4+8* 0], top_empty);
  2355.             AV_WN32A(&nnz_cache[4+8* 5], top_empty);
  2356.             AV_WN32A(&nnz_cache[4+8*10], top_empty);
  2357.         }
  2358.     }
  2359.     h->cur_pic.mb_type[mb_xy] = mb_type;
  2360.  
  2361.     if( cbp || IS_INTRA16x16( mb_type ) ) {
  2362.         const uint8_t *scan, *scan8x8;
  2363.         const uint32_t *qmul;
  2364.  
  2365.         if(IS_INTERLACED(mb_type)){
  2366.             scan8x8 = sl->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
  2367.             scan    = sl->qscale ? h->field_scan : h->field_scan_q0;
  2368.         }else{
  2369.             scan8x8 = sl->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
  2370.             scan    = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
  2371.         }
  2372.  
  2373.         // decode_cabac_mb_dqp
  2374.         if(get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + (sl->last_qscale_diff != 0)])){
  2375.             int val = 1;
  2376.             int ctx= 2;
  2377.             const int max_qp = 51 + 6*(h->sps.bit_depth_luma-8);
  2378.  
  2379.             while( get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + ctx] ) ) {
  2380.                 ctx= 3;
  2381.                 val++;
  2382.                 if(val > 2*max_qp){ //prevent infinite loop
  2383.                     av_log(h->avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", sl->mb_x, sl->mb_y);
  2384.                     return -1;
  2385.                 }
  2386.             }
  2387.  
  2388.             if( val&0x01 )
  2389.                 val=   (val + 1)>>1 ;
  2390.             else
  2391.                 val= -((val + 1)>>1);
  2392.             sl->last_qscale_diff = val;
  2393.             sl->qscale += val;
  2394.             if (((unsigned)sl->qscale) > max_qp){
  2395.                 if (sl->qscale < 0) sl->qscale += max_qp + 1;
  2396.                 else                sl->qscale -= max_qp + 1;
  2397.             }
  2398.             sl->chroma_qp[0] = get_chroma_qp(h, 0, sl->qscale);
  2399.             sl->chroma_qp[1] = get_chroma_qp(h, 1, sl->qscale);
  2400.         }else
  2401.             sl->last_qscale_diff=0;
  2402.  
  2403.         decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
  2404.         if (CHROMA444(h)) {
  2405.             decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
  2406.             decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 2);
  2407.         } else if (CHROMA422(h)) {
  2408.             if( cbp&0x30 ){
  2409.                 int c;
  2410.                 for (c = 0; c < 2; c++)
  2411.                     decode_cabac_residual_dc_422(h, sl, sl->mb + ((256 + 16*16*c) << pixel_shift), 3,
  2412.                                                  CHROMA_DC_BLOCK_INDEX + c,
  2413.                                                  chroma422_dc_scan, 8);
  2414.             }
  2415.  
  2416.             if( cbp&0x20 ) {
  2417.                 int c, i, i8x8;
  2418.                 for( c = 0; c < 2; c++ ) {
  2419.                     int16_t *mb = sl->mb + (16*(16 + 16*c) << pixel_shift);
  2420.                     qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
  2421.                     for (i8x8 = 0; i8x8 < 2; i8x8++) {
  2422.                         for (i = 0; i < 4; i++) {
  2423.                             const int index = 16 + 16 * c + 8*i8x8 + i;
  2424.                             decode_cabac_residual_nondc(h, sl, mb, 4, index, scan + 1, qmul, 15);
  2425.                             mb += 16<<pixel_shift;
  2426.                         }
  2427.                     }
  2428.                 }
  2429.             } else {
  2430.                 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
  2431.                 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
  2432.             }
  2433.         } else /* yuv420 */ {
  2434.             if( cbp&0x30 ){
  2435.                 int c;
  2436.                 for (c = 0; c < 2; c++)
  2437.                     decode_cabac_residual_dc(h, sl, sl->mb + ((256 + 16*16*c) << pixel_shift), 3, CHROMA_DC_BLOCK_INDEX+c, chroma_dc_scan, 4);
  2438.             }
  2439.  
  2440.             if( cbp&0x20 ) {
  2441.                 int c, i;
  2442.                 for( c = 0; c < 2; c++ ) {
  2443.                     qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][sl->chroma_qp[c]];
  2444.                     for( i = 0; i < 4; i++ ) {
  2445.                         const int index = 16 + 16 * c + i;
  2446.                         decode_cabac_residual_nondc(h, sl, sl->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
  2447.                     }
  2448.                 }
  2449.             } else {
  2450.                 fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
  2451.                 fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
  2452.             }
  2453.         }
  2454.     } else {
  2455.         fill_rectangle(&sl->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
  2456.         fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
  2457.         fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
  2458.         sl->last_qscale_diff = 0;
  2459.     }
  2460.  
  2461.     h->cur_pic.qscale_table[mb_xy] = sl->qscale;
  2462.     write_back_non_zero_count(h, sl);
  2463.  
  2464.     return 0;
  2465. }
  2466.