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