LCOV - code coverage report
Current view: top level - libavcodec - h264_cabac.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 609 641 95.0 %
Date: 2017-12-11 04:34:20 Functions: 22 22 100.0 %

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

Generated by: LCOV version 1.13