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