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 Libav. 6 * 7 * Libav 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 * Libav 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 Libav; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 */ 21 22/** 23 * @file 24 * H.264 / AVC / MPEG4 part10 cabac decoding. 25 * @author Michael Niedermayer <michaelni@gmx.at> 26 */ 27 28#define CABAC 1 29 30#include "config.h" 31#include "cabac.h" 32#include "cabac_functions.h" 33#include "internal.h" 34#include "dsputil.h" 35#include "avcodec.h" 36#include "h264.h" 37#include "h264data.h" 38#include "h264_mvpred.h" 39#include "golomb.h" 40 41#if ARCH_X86 42#include "x86/h264_i386.h" 43#endif 44 45//#undef NDEBUG 46#include <assert.h> 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 unsused 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(H264Context *h) { 1263 MpegEncContext * const s = &h->s; 1264 int i; 1265 const int8_t (*tab)[2]; 1266 const int slice_qp = av_clip(s->qscale - 6*(h->sps.bit_depth_luma-8), 0, 51); 1267 1268 if( h->slice_type_nos == AV_PICTURE_TYPE_I ) tab = cabac_context_init_I; 1269 else tab = cabac_context_init_PB[h->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 h->cabac_state[i] = pre; 1280 } 1281} 1282 1283static int decode_cabac_field_decoding_flag(H264Context *h) { 1284 MpegEncContext * const s = &h->s; 1285 const long mbb_xy = h->mb_xy - 2L*s->mb_stride; 1286 1287 unsigned long ctx = 0; 1288 1289 ctx += h->mb_field_decoding_flag & !!s->mb_x; //for FMO:(s->current_picture.f.mb_type[mba_xy] >> 7) & (h->slice_table[mba_xy] == h->slice_num); 1290 ctx += (s->current_picture.f.mb_type[mbb_xy] >> 7) & (h->slice_table[mbb_xy] == h->slice_num); 1291 1292 return get_cabac_noinline( &h->cabac, &(h->cabac_state+70)[ctx] ); 1293} 1294 1295static int decode_cabac_intra_mb_type(H264Context *h, int ctx_base, int intra_slice) { 1296 uint8_t *state= &h->cabac_state[ctx_base]; 1297 int mb_type; 1298 1299 if(intra_slice){ 1300 int ctx=0; 1301 if( h->left_type[LTOP] & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM)) 1302 ctx++; 1303 if( h->top_type & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM)) 1304 ctx++; 1305 if( get_cabac_noinline( &h->cabac, &state[ctx] ) == 0 ) 1306 return 0; /* I4x4 */ 1307 state += 2; 1308 }else{ 1309 if( get_cabac_noinline( &h->cabac, state ) == 0 ) 1310 return 0; /* I4x4 */ 1311 } 1312 1313 if( get_cabac_terminate( &h->cabac ) ) 1314 return 25; /* PCM */ 1315 1316 mb_type = 1; /* I16x16 */ 1317 mb_type += 12 * get_cabac_noinline( &h->cabac, &state[1] ); /* cbp_luma != 0 */ 1318 if( get_cabac_noinline( &h->cabac, &state[2] ) ) /* cbp_chroma */ 1319 mb_type += 4 + 4 * get_cabac_noinline( &h->cabac, &state[2+intra_slice] ); 1320 mb_type += 2 * get_cabac_noinline( &h->cabac, &state[3+intra_slice] ); 1321 mb_type += 1 * get_cabac_noinline( &h->cabac, &state[3+2*intra_slice] ); 1322 return mb_type; 1323} 1324 1325static int decode_cabac_mb_skip( H264Context *h, int mb_x, int mb_y ) { 1326 MpegEncContext * const s = &h->s; 1327 int mba_xy, mbb_xy; 1328 int ctx = 0; 1329 1330 if(FRAME_MBAFF){ //FIXME merge with the stuff in fill_caches? 1331 int mb_xy = mb_x + (mb_y&~1)*s->mb_stride; 1332 mba_xy = mb_xy - 1; 1333 if( (mb_y&1) 1334 && h->slice_table[mba_xy] == h->slice_num 1335 && MB_FIELD == !!IS_INTERLACED( s->current_picture.f.mb_type[mba_xy] ) ) 1336 mba_xy += s->mb_stride; 1337 if( MB_FIELD ){ 1338 mbb_xy = mb_xy - s->mb_stride; 1339 if( !(mb_y&1) 1340 && h->slice_table[mbb_xy] == h->slice_num 1341 && IS_INTERLACED( s->current_picture.f.mb_type[mbb_xy] ) ) 1342 mbb_xy -= s->mb_stride; 1343 }else 1344 mbb_xy = mb_x + (mb_y-1)*s->mb_stride; 1345 }else{ 1346 int mb_xy = h->mb_xy; 1347 mba_xy = mb_xy - 1; 1348 mbb_xy = mb_xy - (s->mb_stride << FIELD_PICTURE); 1349 } 1350 1351 if( h->slice_table[mba_xy] == h->slice_num && !IS_SKIP( s->current_picture.f.mb_type[mba_xy] )) 1352 ctx++; 1353 if( h->slice_table[mbb_xy] == h->slice_num && !IS_SKIP( s->current_picture.f.mb_type[mbb_xy] )) 1354 ctx++; 1355 1356 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) 1357 ctx += 13; 1358 return get_cabac_noinline( &h->cabac, &h->cabac_state[11+ctx] ); 1359} 1360 1361static int decode_cabac_mb_intra4x4_pred_mode( H264Context *h, int pred_mode ) { 1362 int mode = 0; 1363 1364 if( get_cabac( &h->cabac, &h->cabac_state[68] ) ) 1365 return pred_mode; 1366 1367 mode += 1 * get_cabac( &h->cabac, &h->cabac_state[69] ); 1368 mode += 2 * get_cabac( &h->cabac, &h->cabac_state[69] ); 1369 mode += 4 * get_cabac( &h->cabac, &h->cabac_state[69] ); 1370 1371 return mode + ( mode >= pred_mode ); 1372} 1373 1374static int decode_cabac_mb_chroma_pre_mode( H264Context *h) { 1375 const int mba_xy = h->left_mb_xy[0]; 1376 const int mbb_xy = h->top_mb_xy; 1377 1378 int ctx = 0; 1379 1380 /* No need to test for IS_INTRA4x4 and IS_INTRA16x16, as we set chroma_pred_mode_table to 0 */ 1381 if( h->left_type[LTOP] && h->chroma_pred_mode_table[mba_xy] != 0 ) 1382 ctx++; 1383 1384 if( h->top_type && h->chroma_pred_mode_table[mbb_xy] != 0 ) 1385 ctx++; 1386 1387 if( get_cabac_noinline( &h->cabac, &h->cabac_state[64+ctx] ) == 0 ) 1388 return 0; 1389 1390 if( get_cabac_noinline( &h->cabac, &h->cabac_state[64+3] ) == 0 ) 1391 return 1; 1392 if( get_cabac_noinline( &h->cabac, &h->cabac_state[64+3] ) == 0 ) 1393 return 2; 1394 else 1395 return 3; 1396} 1397 1398static int decode_cabac_mb_cbp_luma( H264Context *h) { 1399 int cbp_b, cbp_a, ctx, cbp = 0; 1400 1401 cbp_a = h->left_cbp; 1402 cbp_b = h->top_cbp; 1403 1404 ctx = !(cbp_a & 0x02) + 2 * !(cbp_b & 0x04); 1405 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]); 1406 ctx = !(cbp & 0x01) + 2 * !(cbp_b & 0x08); 1407 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]) << 1; 1408 ctx = !(cbp_a & 0x08) + 2 * !(cbp & 0x01); 1409 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]) << 2; 1410 ctx = !(cbp & 0x04) + 2 * !(cbp & 0x02); 1411 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]) << 3; 1412 return cbp; 1413} 1414static int decode_cabac_mb_cbp_chroma( H264Context *h) { 1415 int ctx; 1416 int cbp_a, cbp_b; 1417 1418 cbp_a = (h->left_cbp>>4)&0x03; 1419 cbp_b = (h-> top_cbp>>4)&0x03; 1420 1421 ctx = 0; 1422 if( cbp_a > 0 ) ctx++; 1423 if( cbp_b > 0 ) ctx += 2; 1424 if( get_cabac_noinline( &h->cabac, &h->cabac_state[77 + ctx] ) == 0 ) 1425 return 0; 1426 1427 ctx = 4; 1428 if( cbp_a == 2 ) ctx++; 1429 if( cbp_b == 2 ) ctx += 2; 1430 return 1 + get_cabac_noinline( &h->cabac, &h->cabac_state[77 + ctx] ); 1431} 1432 1433static int decode_cabac_p_mb_sub_type( H264Context *h ) { 1434 if( get_cabac( &h->cabac, &h->cabac_state[21] ) ) 1435 return 0; /* 8x8 */ 1436 if( !get_cabac( &h->cabac, &h->cabac_state[22] ) ) 1437 return 1; /* 8x4 */ 1438 if( get_cabac( &h->cabac, &h->cabac_state[23] ) ) 1439 return 2; /* 4x8 */ 1440 return 3; /* 4x4 */ 1441} 1442static int decode_cabac_b_mb_sub_type( H264Context *h ) { 1443 int type; 1444 if( !get_cabac( &h->cabac, &h->cabac_state[36] ) ) 1445 return 0; /* B_Direct_8x8 */ 1446 if( !get_cabac( &h->cabac, &h->cabac_state[37] ) ) 1447 return 1 + get_cabac( &h->cabac, &h->cabac_state[39] ); /* B_L0_8x8, B_L1_8x8 */ 1448 type = 3; 1449 if( get_cabac( &h->cabac, &h->cabac_state[38] ) ) { 1450 if( get_cabac( &h->cabac, &h->cabac_state[39] ) ) 1451 return 11 + get_cabac( &h->cabac, &h->cabac_state[39] ); /* B_L1_4x4, B_Bi_4x4 */ 1452 type += 4; 1453 } 1454 type += 2*get_cabac( &h->cabac, &h->cabac_state[39] ); 1455 type += get_cabac( &h->cabac, &h->cabac_state[39] ); 1456 return type; 1457} 1458 1459static int decode_cabac_mb_ref( H264Context *h, int list, int n ) { 1460 int refa = h->ref_cache[list][scan8[n] - 1]; 1461 int refb = h->ref_cache[list][scan8[n] - 8]; 1462 int ref = 0; 1463 int ctx = 0; 1464 1465 if( h->slice_type_nos == AV_PICTURE_TYPE_B) { 1466 if( refa > 0 && !(h->direct_cache[scan8[n] - 1]&(MB_TYPE_DIRECT2>>1)) ) 1467 ctx++; 1468 if( refb > 0 && !(h->direct_cache[scan8[n] - 8]&(MB_TYPE_DIRECT2>>1)) ) 1469 ctx += 2; 1470 } else { 1471 if( refa > 0 ) 1472 ctx++; 1473 if( refb > 0 ) 1474 ctx += 2; 1475 } 1476 1477 while( get_cabac( &h->cabac, &h->cabac_state[54+ctx] ) ) { 1478 ref++; 1479 ctx = (ctx>>2)+4; 1480 if(ref >= 32 /*h->ref_list[list]*/){ 1481 return -1; 1482 } 1483 } 1484 return ref; 1485} 1486 1487static int decode_cabac_mb_mvd( H264Context *h, int ctxbase, int amvd, int *mvda) { 1488 int mvd; 1489 1490 if(!get_cabac(&h->cabac, &h->cabac_state[ctxbase+((amvd-3)>>(INT_BIT-1))+((amvd-33)>>(INT_BIT-1))+2])){ 1491// if(!get_cabac(&h->cabac, &h->cabac_state[ctxbase+(amvd>2)+(amvd>32)])){ 1492 *mvda= 0; 1493 return 0; 1494 } 1495 1496 mvd= 1; 1497 ctxbase+= 3; 1498 while( mvd < 9 && get_cabac( &h->cabac, &h->cabac_state[ctxbase] ) ) { 1499 if( mvd < 4 ) 1500 ctxbase++; 1501 mvd++; 1502 } 1503 1504 if( mvd >= 9 ) { 1505 int k = 3; 1506 while( get_cabac_bypass( &h->cabac ) ) { 1507 mvd += 1 << k; 1508 k++; 1509 if(k>24){ 1510 av_log(h->s.avctx, AV_LOG_ERROR, "overflow in decode_cabac_mb_mvd\n"); 1511 return INT_MIN; 1512 } 1513 } 1514 while( k-- ) { 1515 mvd += get_cabac_bypass( &h->cabac )<<k; 1516 } 1517 *mvda=mvd < 70 ? mvd : 70; 1518 }else 1519 *mvda=mvd; 1520 return get_cabac_bypass_sign( &h->cabac, -mvd ); 1521} 1522 1523#define DECODE_CABAC_MB_MVD( h, list, n )\ 1524{\ 1525 int amvd0 = h->mvd_cache[list][scan8[n] - 1][0] +\ 1526 h->mvd_cache[list][scan8[n] - 8][0];\ 1527 int amvd1 = h->mvd_cache[list][scan8[n] - 1][1] +\ 1528 h->mvd_cache[list][scan8[n] - 8][1];\ 1529\ 1530 mx += decode_cabac_mb_mvd( h, 40, amvd0, &mpx );\ 1531 my += decode_cabac_mb_mvd( h, 47, amvd1, &mpy );\ 1532} 1533 1534static av_always_inline int get_cabac_cbf_ctx( H264Context *h, int cat, int idx, int max_coeff, int is_dc ) { 1535 int nza, nzb; 1536 int ctx = 0; 1537 static const uint16_t base_ctx[14] = {85,89,93,97,101,1012,460,464,468,1016,472,476,480,1020}; 1538 1539 if( is_dc ) { 1540 if( cat == 3 ) { 1541 idx -= CHROMA_DC_BLOCK_INDEX; 1542 nza = (h->left_cbp>>(6+idx))&0x01; 1543 nzb = (h-> top_cbp>>(6+idx))&0x01; 1544 } else { 1545 idx -= LUMA_DC_BLOCK_INDEX; 1546 nza = h->left_cbp&(0x100<<idx); 1547 nzb = h-> top_cbp&(0x100<<idx); 1548 } 1549 } else { 1550 nza = h->non_zero_count_cache[scan8[idx] - 1]; 1551 nzb = h->non_zero_count_cache[scan8[idx] - 8]; 1552 } 1553 1554 if( nza > 0 ) 1555 ctx++; 1556 1557 if( nzb > 0 ) 1558 ctx += 2; 1559 1560 return base_ctx[cat] + ctx; 1561} 1562 1563DECLARE_ASM_CONST(1, uint8_t, last_coeff_flag_offset_8x8)[63] = { 1564 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1565 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1566 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 1567 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8 1568}; 1569 1570static av_always_inline void 1571decode_cabac_residual_internal(H264Context *h, DCTELEM *block, 1572 int cat, int n, const uint8_t *scantable, 1573 const uint32_t *qmul, int max_coeff, 1574 int is_dc, int chroma422) 1575{ 1576 static const int significant_coeff_flag_offset[2][14] = { 1577 { 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 }, 1578 { 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 } 1579 }; 1580 static const int last_coeff_flag_offset[2][14] = { 1581 { 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 }, 1582 { 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 } 1583 }; 1584 static const int coeff_abs_level_m1_offset[14] = { 1585 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 1586 }; 1587 static const uint8_t significant_coeff_flag_offset_8x8[2][63] = { 1588 { 0, 1, 2, 3, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 5, 5, 1589 4, 4, 4, 4, 3, 3, 6, 7, 7, 7, 8, 9,10, 9, 8, 7, 1590 7, 6,11,12,13,11, 6, 7, 8, 9,14,10, 9, 8, 6,11, 1591 12,13,11, 6, 9,14,10, 9,11,12,13,11,14,10,12 }, 1592 { 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 4, 5, 1593 6, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,11,12,11, 1594 9, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,13,13, 9, 1595 9,10,10, 8,13,13, 9, 9,10,10,14,14,14,14,14 } 1596 }; 1597 static const uint8_t sig_coeff_offset_dc[7] = { 0, 0, 1, 1, 2, 2, 2 }; 1598 /* node ctx: 0..3: abslevel1 (with abslevelgt1 == 0). 1599 * 4..7: abslevelgt1 + 3 (and abslevel1 doesn't matter). 1600 * map node ctx => cabac ctx for level=1 */ 1601 static const uint8_t coeff_abs_level1_ctx[8] = { 1, 2, 3, 4, 0, 0, 0, 0 }; 1602 /* map node ctx => cabac ctx for level>1 */ 1603 static const uint8_t coeff_abs_levelgt1_ctx[2][8] = { 1604 { 5, 5, 5, 5, 6, 7, 8, 9 }, 1605 { 5, 5, 5, 5, 6, 7, 8, 8 }, // 422/dc case 1606 }; 1607 static const uint8_t coeff_abs_level_transition[2][8] = { 1608 /* update node ctx after decoding a level=1 */ 1609 { 1, 2, 3, 3, 4, 5, 6, 7 }, 1610 /* update node ctx after decoding a level>1 */ 1611 { 4, 4, 4, 4, 5, 6, 7, 7 } 1612 }; 1613 1614 int index[64]; 1615 1616 int av_unused last; 1617 int coeff_count = 0; 1618 int node_ctx = 0; 1619 1620 uint8_t *significant_coeff_ctx_base; 1621 uint8_t *last_coeff_ctx_base; 1622 uint8_t *abs_level_m1_ctx_base; 1623 1624#if !ARCH_X86 1625#define CABAC_ON_STACK 1626#endif 1627#ifdef CABAC_ON_STACK 1628#define CC &cc 1629 CABACContext cc; 1630 cc.range = h->cabac.range; 1631 cc.low = h->cabac.low; 1632 cc.bytestream= h->cabac.bytestream; 1633#else 1634#define CC &h->cabac 1635#endif 1636 1637 significant_coeff_ctx_base = h->cabac_state 1638 + significant_coeff_flag_offset[MB_FIELD][cat]; 1639 last_coeff_ctx_base = h->cabac_state 1640 + last_coeff_flag_offset[MB_FIELD][cat]; 1641 abs_level_m1_ctx_base = h->cabac_state 1642 + coeff_abs_level_m1_offset[cat]; 1643 1644 if( !is_dc && max_coeff == 64 ) { 1645#define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \ 1646 for(last= 0; last < coefs; last++) { \ 1647 uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \ 1648 if( get_cabac( CC, sig_ctx )) { \ 1649 uint8_t *last_ctx = last_coeff_ctx_base + last_off; \ 1650 index[coeff_count++] = last; \ 1651 if( get_cabac( CC, last_ctx ) ) { \ 1652 last= max_coeff; \ 1653 break; \ 1654 } \ 1655 } \ 1656 }\ 1657 if( last == max_coeff -1 ) {\ 1658 index[coeff_count++] = last;\ 1659 } 1660 const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD]; 1661#if ARCH_X86 && HAVE_7REGS && !defined(BROKEN_RELOCATIONS) 1662 coeff_count= decode_significance_8x8_x86(CC, significant_coeff_ctx_base, index, 1663 last_coeff_ctx_base, sig_off); 1664 } else { 1665 if (is_dc && chroma422) { // dc 422 1666 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]); 1667 } else { 1668 coeff_count= decode_significance_x86(CC, max_coeff, significant_coeff_ctx_base, index, 1669 last_coeff_ctx_base-significant_coeff_ctx_base); 1670 } 1671#else 1672 DECODE_SIGNIFICANCE( 63, sig_off[last], last_coeff_flag_offset_8x8[last] ); 1673 } else { 1674 if (is_dc && chroma422) { // dc 422 1675 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]); 1676 } else { 1677 DECODE_SIGNIFICANCE(max_coeff - 1, last, last); 1678 } 1679#endif 1680 } 1681 assert(coeff_count > 0); 1682 1683 if( is_dc ) { 1684 if( cat == 3 ) 1685 h->cbp_table[h->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX); 1686 else 1687 h->cbp_table[h->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX); 1688 h->non_zero_count_cache[scan8[n]] = coeff_count; 1689 } else { 1690 if( max_coeff == 64 ) 1691 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1); 1692 else { 1693 assert( cat == 1 || cat == 2 || cat == 4 || cat == 7 || cat == 8 || cat == 11 || cat == 12 ); 1694 h->non_zero_count_cache[scan8[n]] = coeff_count; 1695 } 1696 } 1697 1698#define STORE_BLOCK(type) \ 1699 do { \ 1700 uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; \ 1701 \ 1702 int j= scantable[index[--coeff_count]]; \ 1703 \ 1704 if( get_cabac( CC, ctx ) == 0 ) { \ 1705 node_ctx = coeff_abs_level_transition[0][node_ctx]; \ 1706 if( is_dc ) { \ 1707 ((type*)block)[j] = get_cabac_bypass_sign( CC, -1); \ 1708 }else{ \ 1709 ((type*)block)[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; \ 1710 } \ 1711 } else { \ 1712 int coeff_abs = 2; \ 1713 ctx = coeff_abs_levelgt1_ctx[is_dc && chroma422][node_ctx] + abs_level_m1_ctx_base; \ 1714 node_ctx = coeff_abs_level_transition[1][node_ctx]; \ 1715\ 1716 while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { \ 1717 coeff_abs++; \ 1718 } \ 1719\ 1720 if( coeff_abs >= 15 ) { \ 1721 int j = 0; \ 1722 while( get_cabac_bypass( CC ) ) { \ 1723 j++; \ 1724 } \ 1725\ 1726 coeff_abs=1; \ 1727 while( j-- ) { \ 1728 coeff_abs += coeff_abs + get_cabac_bypass( CC ); \ 1729 } \ 1730 coeff_abs+= 14; \ 1731 } \ 1732\ 1733 if( is_dc ) { \ 1734 ((type*)block)[j] = get_cabac_bypass_sign( CC, -coeff_abs ); \ 1735 }else{ \ 1736 ((type*)block)[j] = ((int)(get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32)) >> 6; \ 1737 } \ 1738 } \ 1739 } while ( coeff_count ); 1740 1741 if (h->pixel_shift) { 1742 STORE_BLOCK(int32_t) 1743 } else { 1744 STORE_BLOCK(int16_t) 1745 } 1746#ifdef CABAC_ON_STACK 1747 h->cabac.range = cc.range ; 1748 h->cabac.low = cc.low ; 1749 h->cabac.bytestream= cc.bytestream; 1750#endif 1751 1752} 1753 1754static void decode_cabac_residual_dc_internal( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, int max_coeff ) { 1755 decode_cabac_residual_internal(h, block, cat, n, scantable, NULL, max_coeff, 1, 0); 1756} 1757 1758static void decode_cabac_residual_dc_internal_422(H264Context *h, DCTELEM *block, 1759 int cat, int n, const uint8_t *scantable, 1760 int max_coeff) 1761{ 1762 decode_cabac_residual_internal(h, block, cat, n, scantable, NULL, max_coeff, 1, 1); 1763} 1764 1765static void decode_cabac_residual_nondc_internal( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff ) { 1766 decode_cabac_residual_internal(h, block, cat, n, scantable, qmul, max_coeff, 0, 0); 1767} 1768 1769/* cat: 0-> DC 16x16 n = 0 1770 * 1-> AC 16x16 n = luma4x4idx 1771 * 2-> Luma4x4 n = luma4x4idx 1772 * 3-> DC Chroma n = iCbCr 1773 * 4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx 1774 * 5-> Luma8x8 n = 4 * luma8x8idx */ 1775 1776/* Partially inline the CABAC residual decode: inline the coded block flag. 1777 * This has very little impact on binary size and improves performance 1778 * because it allows improved constant propagation into get_cabac_cbf_ctx, 1779 * as well as because most blocks have zero CBFs. */ 1780 1781static av_always_inline void decode_cabac_residual_dc( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, int max_coeff ) { 1782 /* read coded block flag */ 1783 if( get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 1 ) ] ) == 0 ) { 1784 h->non_zero_count_cache[scan8[n]] = 0; 1785 return; 1786 } 1787 decode_cabac_residual_dc_internal( h, block, cat, n, scantable, max_coeff ); 1788} 1789 1790static av_always_inline void 1791decode_cabac_residual_dc_422(H264Context *h, DCTELEM *block, 1792 int cat, int n, const uint8_t *scantable, 1793 int max_coeff) 1794{ 1795 /* read coded block flag */ 1796 if (get_cabac(&h->cabac, &h->cabac_state[get_cabac_cbf_ctx(h, cat, n, max_coeff, 1)]) == 0) { 1797 h->non_zero_count_cache[scan8[n]] = 0; 1798 return; 1799 } 1800 decode_cabac_residual_dc_internal_422(h, block, cat, n, scantable, max_coeff); 1801} 1802 1803static av_always_inline void decode_cabac_residual_nondc( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff ) { 1804 /* read coded block flag */ 1805 if( (cat != 5 || CHROMA444) && get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 0 ) ] ) == 0 ) { 1806 if( max_coeff == 64 ) { 1807 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1); 1808 } else { 1809 h->non_zero_count_cache[scan8[n]] = 0; 1810 } 1811 return; 1812 } 1813 decode_cabac_residual_nondc_internal( h, block, cat, n, scantable, qmul, max_coeff ); 1814} 1815 1816static av_always_inline void decode_cabac_luma_residual( H264Context *h, const uint8_t *scan, const uint8_t *scan8x8, int pixel_shift, int mb_type, int cbp, int p ) 1817{ 1818 static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}}; 1819 const uint32_t *qmul; 1820 int i8x8, i4x4; 1821 MpegEncContext * const s = &h->s; 1822 int qscale = p == 0 ? s->qscale : h->chroma_qp[p-1]; 1823 if( IS_INTRA16x16( mb_type ) ) { 1824 //av_log( s->avctx, AV_LOG_ERROR, "INTRA16x16 DC\n" ); 1825 AV_ZERO128(h->mb_luma_dc[p]+0); 1826 AV_ZERO128(h->mb_luma_dc[p]+8); 1827 AV_ZERO128(h->mb_luma_dc[p]+16); 1828 AV_ZERO128(h->mb_luma_dc[p]+24); 1829 decode_cabac_residual_dc(h, h->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16); 1830 1831 if( cbp&15 ) { 1832 qmul = h->dequant4_coeff[p][qscale]; 1833 for( i4x4 = 0; i4x4 < 16; i4x4++ ) { 1834 const int index = 16*p + i4x4; 1835 //av_log( s->avctx, AV_LOG_ERROR, "INTRA16x16 AC:%d\n", index ); 1836 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15); 1837 } 1838 } else { 1839 fill_rectangle(&h->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1); 1840 } 1841 } else { 1842 int cqm = (IS_INTRA( mb_type ) ? 0:3) + p; 1843 for( i8x8 = 0; i8x8 < 4; i8x8++ ) { 1844 if( cbp & (1<<i8x8) ) { 1845 if( IS_8x8DCT(mb_type) ) { 1846 const int index = 16*p + 4*i8x8; 1847 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[3][p], index, 1848 scan8x8, h->dequant8_coeff[cqm][qscale], 64); 1849 } else { 1850 qmul = h->dequant4_coeff[cqm][qscale]; 1851 for( i4x4 = 0; i4x4 < 4; i4x4++ ) { 1852 const int index = 16*p + 4*i8x8 + i4x4; 1853 //av_log( s->avctx, AV_LOG_ERROR, "Luma4x4: %d\n", index ); 1854//START_TIMER 1855 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16); 1856//STOP_TIMER("decode_residual") 1857 } 1858 } 1859 } else { 1860 fill_rectangle(&h->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1); 1861 } 1862 } 1863 } 1864} 1865 1866/** 1867 * Decode a macroblock. 1868 * @return 0 if OK, ER_AC_ERROR / ER_DC_ERROR / ER_MV_ERROR if an error is noticed 1869 */ 1870int ff_h264_decode_mb_cabac(H264Context *h) { 1871 MpegEncContext * const s = &h->s; 1872 int mb_xy; 1873 int mb_type, partition_count, cbp = 0; 1874 int dct8x8_allowed= h->pps.transform_8x8_mode; 1875 int decode_chroma = h->sps.chroma_format_idc == 1 || h->sps.chroma_format_idc == 2; 1876 const int pixel_shift = h->pixel_shift; 1877 1878 mb_xy = h->mb_xy = s->mb_x + s->mb_y*s->mb_stride; 1879 1880 tprintf(s->avctx, "pic:%d mb:%d/%d\n", h->frame_num, s->mb_x, s->mb_y); 1881 if( h->slice_type_nos != AV_PICTURE_TYPE_I ) { 1882 int skip; 1883 /* a skipped mb needs the aff flag from the following mb */ 1884 if( FRAME_MBAFF && (s->mb_y&1)==1 && h->prev_mb_skipped ) 1885 skip = h->next_mb_skipped; 1886 else 1887 skip = decode_cabac_mb_skip( h, s->mb_x, s->mb_y ); 1888 /* read skip flags */ 1889 if( skip ) { 1890 if( FRAME_MBAFF && (s->mb_y&1)==0 ){ 1891 s->current_picture.f.mb_type[mb_xy] = MB_TYPE_SKIP; 1892 h->next_mb_skipped = decode_cabac_mb_skip( h, s->mb_x, s->mb_y+1 ); 1893 if(!h->next_mb_skipped) 1894 h->mb_mbaff = h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h); 1895 } 1896 1897 decode_mb_skip(h); 1898 1899 h->cbp_table[mb_xy] = 0; 1900 h->chroma_pred_mode_table[mb_xy] = 0; 1901 h->last_qscale_diff = 0; 1902 1903 return 0; 1904 1905 } 1906 } 1907 if(FRAME_MBAFF){ 1908 if( (s->mb_y&1) == 0 ) 1909 h->mb_mbaff = 1910 h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h); 1911 } 1912 1913 h->prev_mb_skipped = 0; 1914 1915 fill_decode_neighbors(h, -(MB_FIELD)); 1916 1917 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) { 1918 int ctx = 0; 1919 assert(h->slice_type_nos == AV_PICTURE_TYPE_B); 1920 1921 if( !IS_DIRECT( h->left_type[LTOP]-1 ) ) 1922 ctx++; 1923 if( !IS_DIRECT( h->top_type-1 ) ) 1924 ctx++; 1925 1926 if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+ctx] ) ){ 1927 mb_type= 0; /* B_Direct_16x16 */ 1928 }else if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+3] ) ) { 1929 mb_type= 1 + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ); /* B_L[01]_16x16 */ 1930 }else{ 1931 int bits; 1932 bits = get_cabac_noinline( &h->cabac, &h->cabac_state[27+4] ) << 3; 1933 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 2; 1934 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 1; 1935 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ); 1936 if( bits < 8 ){ 1937 mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */ 1938 }else if( bits == 13 ){ 1939 mb_type= decode_cabac_intra_mb_type(h, 32, 0); 1940 goto decode_intra_mb; 1941 }else if( bits == 14 ){ 1942 mb_type= 11; /* B_L1_L0_8x16 */ 1943 }else if( bits == 15 ){ 1944 mb_type= 22; /* B_8x8 */ 1945 }else{ 1946 bits= ( bits<<1 ) + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ); 1947 mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */ 1948 } 1949 } 1950 partition_count= b_mb_type_info[mb_type].partition_count; 1951 mb_type= b_mb_type_info[mb_type].type; 1952 } else if( h->slice_type_nos == AV_PICTURE_TYPE_P ) { 1953 if( get_cabac_noinline( &h->cabac, &h->cabac_state[14] ) == 0 ) { 1954 /* P-type */ 1955 if( get_cabac_noinline( &h->cabac, &h->cabac_state[15] ) == 0 ) { 1956 /* P_L0_D16x16, P_8x8 */ 1957 mb_type= 3 * get_cabac_noinline( &h->cabac, &h->cabac_state[16] ); 1958 } else { 1959 /* P_L0_D8x16, P_L0_D16x8 */ 1960 mb_type= 2 - get_cabac_noinline( &h->cabac, &h->cabac_state[17] ); 1961 } 1962 partition_count= p_mb_type_info[mb_type].partition_count; 1963 mb_type= p_mb_type_info[mb_type].type; 1964 } else { 1965 mb_type= decode_cabac_intra_mb_type(h, 17, 0); 1966 goto decode_intra_mb; 1967 } 1968 } else { 1969 mb_type= decode_cabac_intra_mb_type(h, 3, 1); 1970 if(h->slice_type == AV_PICTURE_TYPE_SI && mb_type) 1971 mb_type--; 1972 assert(h->slice_type_nos == AV_PICTURE_TYPE_I); 1973decode_intra_mb: 1974 partition_count = 0; 1975 cbp= i_mb_type_info[mb_type].cbp; 1976 h->intra16x16_pred_mode= i_mb_type_info[mb_type].pred_mode; 1977 mb_type= i_mb_type_info[mb_type].type; 1978 } 1979 if(MB_FIELD) 1980 mb_type |= MB_TYPE_INTERLACED; 1981 1982 h->slice_table[ mb_xy ]= h->slice_num; 1983 1984 if(IS_INTRA_PCM(mb_type)) { 1985 static const uint16_t mb_sizes[4] = {256,384,512,768}; 1986 const int mb_size = mb_sizes[h->sps.chroma_format_idc]*h->sps.bit_depth_luma >> 3; 1987 const uint8_t *ptr; 1988 1989 // We assume these blocks are very rare so we do not optimize it. 1990 // FIXME The two following lines get the bitstream position in the cabac 1991 // decode, I think it should be done by a function in cabac.h (or cabac.c). 1992 ptr= h->cabac.bytestream; 1993 if(h->cabac.low&0x1) ptr--; 1994 if(CABAC_BITS==16){ 1995 if(h->cabac.low&0x1FF) ptr--; 1996 } 1997 1998 // The pixels are stored in the same order as levels in h->mb array. 1999 if ((int) (h->cabac.bytestream_end - ptr) < mb_size) 2000 return -1; 2001 memcpy(h->mb, ptr, mb_size); ptr+=mb_size; 2002 2003 ff_init_cabac_decoder(&h->cabac, ptr, h->cabac.bytestream_end - ptr); 2004 2005 // All blocks are present 2006 h->cbp_table[mb_xy] = 0xf7ef; 2007 h->chroma_pred_mode_table[mb_xy] = 0; 2008 // In deblocking, the quantizer is 0 2009 s->current_picture.f.qscale_table[mb_xy] = 0; 2010 // All coeffs are present 2011 memset(h->non_zero_count[mb_xy], 16, 48); 2012 s->current_picture.f.mb_type[mb_xy] = mb_type; 2013 h->last_qscale_diff = 0; 2014 return 0; 2015 } 2016 2017 if(MB_MBAFF){ 2018 h->ref_count[0] <<= 1; 2019 h->ref_count[1] <<= 1; 2020 } 2021 2022 fill_decode_caches(h, mb_type); 2023 2024 if( IS_INTRA( mb_type ) ) { 2025 int i, pred_mode; 2026 if( IS_INTRA4x4( mb_type ) ) { 2027 if( dct8x8_allowed && get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] ) ) { 2028 mb_type |= MB_TYPE_8x8DCT; 2029 for( i = 0; i < 16; i+=4 ) { 2030 int pred = pred_intra_mode( h, i ); 2031 int mode = decode_cabac_mb_intra4x4_pred_mode( h, pred ); 2032 fill_rectangle( &h->intra4x4_pred_mode_cache[ scan8[i] ], 2, 2, 8, mode, 1 ); 2033 } 2034 } else { 2035 for( i = 0; i < 16; i++ ) { 2036 int pred = pred_intra_mode( h, i ); 2037 h->intra4x4_pred_mode_cache[ scan8[i] ] = decode_cabac_mb_intra4x4_pred_mode( h, pred ); 2038 2039 //av_log( s->avctx, AV_LOG_ERROR, "i4x4 pred=%d mode=%d\n", pred, h->intra4x4_pred_mode_cache[ scan8[i] ] ); 2040 } 2041 } 2042 write_back_intra_pred_mode(h); 2043 if( ff_h264_check_intra4x4_pred_mode(h) < 0 ) return -1; 2044 } else { 2045 h->intra16x16_pred_mode= ff_h264_check_intra_pred_mode( h, h->intra16x16_pred_mode, 0 ); 2046 if( h->intra16x16_pred_mode < 0 ) return -1; 2047 } 2048 if(decode_chroma){ 2049 h->chroma_pred_mode_table[mb_xy] = 2050 pred_mode = decode_cabac_mb_chroma_pre_mode( h ); 2051 2052 pred_mode= ff_h264_check_intra_pred_mode( h, pred_mode, 1 ); 2053 if( pred_mode < 0 ) return -1; 2054 h->chroma_pred_mode= pred_mode; 2055 } else { 2056 h->chroma_pred_mode= DC_128_PRED8x8; 2057 } 2058 } else if( partition_count == 4 ) { 2059 int i, j, sub_partition_count[4], list, ref[2][4]; 2060 2061 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) { 2062 for( i = 0; i < 4; i++ ) { 2063 h->sub_mb_type[i] = decode_cabac_b_mb_sub_type( h ); 2064 sub_partition_count[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count; 2065 h->sub_mb_type[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].type; 2066 } 2067 if( IS_DIRECT(h->sub_mb_type[0] | h->sub_mb_type[1] | 2068 h->sub_mb_type[2] | h->sub_mb_type[3]) ) { 2069 ff_h264_pred_direct_motion(h, &mb_type); 2070 h->ref_cache[0][scan8[4]] = 2071 h->ref_cache[1][scan8[4]] = 2072 h->ref_cache[0][scan8[12]] = 2073 h->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE; 2074 for( i = 0; i < 4; i++ ) 2075 fill_rectangle( &h->direct_cache[scan8[4*i]], 2, 2, 8, (h->sub_mb_type[i]>>1)&0xFF, 1 ); 2076 } 2077 } else { 2078 for( i = 0; i < 4; i++ ) { 2079 h->sub_mb_type[i] = decode_cabac_p_mb_sub_type( h ); 2080 sub_partition_count[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count; 2081 h->sub_mb_type[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].type; 2082 } 2083 } 2084 2085 for( list = 0; list < h->list_count; list++ ) { 2086 for( i = 0; i < 4; i++ ) { 2087 if(IS_DIRECT(h->sub_mb_type[i])) continue; 2088 if(IS_DIR(h->sub_mb_type[i], 0, list)){ 2089 if( h->ref_count[list] > 1 ){ 2090 ref[list][i] = decode_cabac_mb_ref( h, list, 4*i ); 2091 if(ref[list][i] >= (unsigned)h->ref_count[list]){ 2092 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], h->ref_count[list]); 2093 return -1; 2094 } 2095 }else 2096 ref[list][i] = 0; 2097 } else { 2098 ref[list][i] = -1; 2099 } 2100 h->ref_cache[list][ scan8[4*i]+1 ]= 2101 h->ref_cache[list][ scan8[4*i]+8 ]=h->ref_cache[list][ scan8[4*i]+9 ]= ref[list][i]; 2102 } 2103 } 2104 2105 if(dct8x8_allowed) 2106 dct8x8_allowed = get_dct8x8_allowed(h); 2107 2108 for(list=0; list<h->list_count; list++){ 2109 for(i=0; i<4; i++){ 2110 h->ref_cache[list][ scan8[4*i] ]=h->ref_cache[list][ scan8[4*i]+1 ]; 2111 if(IS_DIRECT(h->sub_mb_type[i])){ 2112 fill_rectangle(h->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2); 2113 continue; 2114 } 2115 2116 if(IS_DIR(h->sub_mb_type[i], 0, list) && !IS_DIRECT(h->sub_mb_type[i])){ 2117 const int sub_mb_type= h->sub_mb_type[i]; 2118 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1; 2119 for(j=0; j<sub_partition_count[i]; j++){ 2120 int mpx, mpy; 2121 int mx, my; 2122 const int index= 4*i + block_width*j; 2123 int16_t (* mv_cache)[2]= &h->mv_cache[list][ scan8[index] ]; 2124 uint8_t (* mvd_cache)[2]= &h->mvd_cache[list][ scan8[index] ]; 2125 pred_motion(h, index, block_width, list, h->ref_cache[list][ scan8[index] ], &mx, &my); 2126 DECODE_CABAC_MB_MVD( h, list, index) 2127 tprintf(s->avctx, "final mv:%d %d\n", mx, my); 2128 2129 if(IS_SUB_8X8(sub_mb_type)){ 2130 mv_cache[ 1 ][0]= 2131 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx; 2132 mv_cache[ 1 ][1]= 2133 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my; 2134 2135 mvd_cache[ 1 ][0]= 2136 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx; 2137 mvd_cache[ 1 ][1]= 2138 mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy; 2139 }else if(IS_SUB_8X4(sub_mb_type)){ 2140 mv_cache[ 1 ][0]= mx; 2141 mv_cache[ 1 ][1]= my; 2142 2143 mvd_cache[ 1 ][0]= mpx; 2144 mvd_cache[ 1 ][1]= mpy; 2145 }else if(IS_SUB_4X8(sub_mb_type)){ 2146 mv_cache[ 8 ][0]= mx; 2147 mv_cache[ 8 ][1]= my; 2148 2149 mvd_cache[ 8 ][0]= mpx; 2150 mvd_cache[ 8 ][1]= mpy; 2151 } 2152 mv_cache[ 0 ][0]= mx; 2153 mv_cache[ 0 ][1]= my; 2154 2155 mvd_cache[ 0 ][0]= mpx; 2156 mvd_cache[ 0 ][1]= mpy; 2157 } 2158 }else{ 2159 fill_rectangle(h->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4); 2160 fill_rectangle(h->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2); 2161 } 2162 } 2163 } 2164 } else if( IS_DIRECT(mb_type) ) { 2165 ff_h264_pred_direct_motion(h, &mb_type); 2166 fill_rectangle(h->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2); 2167 fill_rectangle(h->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2); 2168 dct8x8_allowed &= h->sps.direct_8x8_inference_flag; 2169 } else { 2170 int list, i; 2171 if(IS_16X16(mb_type)){ 2172 for(list=0; list<h->list_count; list++){ 2173 if(IS_DIR(mb_type, 0, list)){ 2174 int ref; 2175 if(h->ref_count[list] > 1){ 2176 ref= decode_cabac_mb_ref(h, list, 0); 2177 if(ref >= (unsigned)h->ref_count[list]){ 2178 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]); 2179 return -1; 2180 } 2181 }else 2182 ref=0; 2183 fill_rectangle(&h->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1); 2184 } 2185 } 2186 for(list=0; list<h->list_count; list++){ 2187 if(IS_DIR(mb_type, 0, list)){ 2188 int mx,my,mpx,mpy; 2189 pred_motion(h, 0, 4, list, h->ref_cache[list][ scan8[0] ], &mx, &my); 2190 DECODE_CABAC_MB_MVD( h, list, 0) 2191 tprintf(s->avctx, "final mv:%d %d\n", mx, my); 2192 2193 fill_rectangle(h->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2); 2194 fill_rectangle(h->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4); 2195 } 2196 } 2197 } 2198 else if(IS_16X8(mb_type)){ 2199 for(list=0; list<h->list_count; list++){ 2200 for(i=0; i<2; i++){ 2201 if(IS_DIR(mb_type, i, list)){ 2202 int ref; 2203 if(h->ref_count[list] > 1){ 2204 ref= decode_cabac_mb_ref( h, list, 8*i ); 2205 if(ref >= (unsigned)h->ref_count[list]){ 2206 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]); 2207 return -1; 2208 } 2209 }else 2210 ref=0; 2211 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1); 2212 }else 2213 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1); 2214 } 2215 } 2216 for(list=0; list<h->list_count; list++){ 2217 for(i=0; i<2; i++){ 2218 if(IS_DIR(mb_type, i, list)){ 2219 int mx,my,mpx,mpy; 2220 pred_16x8_motion(h, 8*i, list, h->ref_cache[list][scan8[0] + 16*i], &mx, &my); 2221 DECODE_CABAC_MB_MVD( h, list, 8*i) 2222 tprintf(s->avctx, "final mv:%d %d\n", mx, my); 2223 2224 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2); 2225 fill_rectangle(h->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4); 2226 }else{ 2227 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2); 2228 fill_rectangle(h-> mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4); 2229 } 2230 } 2231 } 2232 }else{ 2233 assert(IS_8X16(mb_type)); 2234 for(list=0; list<h->list_count; list++){ 2235 for(i=0; i<2; i++){ 2236 if(IS_DIR(mb_type, i, list)){ //FIXME optimize 2237 int ref; 2238 if(h->ref_count[list] > 1){ 2239 ref= decode_cabac_mb_ref( h, list, 4*i ); 2240 if(ref >= (unsigned)h->ref_count[list]){ 2241 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]); 2242 return -1; 2243 } 2244 }else 2245 ref=0; 2246 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1); 2247 }else 2248 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1); 2249 } 2250 } 2251 for(list=0; list<h->list_count; list++){ 2252 for(i=0; i<2; i++){ 2253 if(IS_DIR(mb_type, i, list)){ 2254 int mx,my,mpx,mpy; 2255 pred_8x16_motion(h, i*4, list, h->ref_cache[list][ scan8[0] + 2*i ], &mx, &my); 2256 DECODE_CABAC_MB_MVD( h, list, 4*i) 2257 2258 tprintf(s->avctx, "final mv:%d %d\n", mx, my); 2259 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2); 2260 fill_rectangle(h->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4); 2261 }else{ 2262 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2); 2263 fill_rectangle(h-> mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4); 2264 } 2265 } 2266 } 2267 } 2268 } 2269 2270 if( IS_INTER( mb_type ) ) { 2271 h->chroma_pred_mode_table[mb_xy] = 0; 2272 write_back_motion( h, mb_type ); 2273 } 2274 2275 if( !IS_INTRA16x16( mb_type ) ) { 2276 cbp = decode_cabac_mb_cbp_luma( h ); 2277 if(decode_chroma) 2278 cbp |= decode_cabac_mb_cbp_chroma( h ) << 4; 2279 } 2280 2281 h->cbp_table[mb_xy] = h->cbp = cbp; 2282 2283 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) { 2284 mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] ); 2285 } 2286 2287 /* It would be better to do this in fill_decode_caches, but we don't know 2288 * the transform mode of the current macroblock there. */ 2289 if (CHROMA444 && IS_8x8DCT(mb_type)){ 2290 int i; 2291 uint8_t *nnz_cache = h->non_zero_count_cache; 2292 for (i = 0; i < 2; i++){ 2293 if (h->left_type[LEFT(i)] && !IS_8x8DCT(h->left_type[LEFT(i)])){ 2294 nnz_cache[3+8* 1 + 2*8*i]= 2295 nnz_cache[3+8* 2 + 2*8*i]= 2296 nnz_cache[3+8* 6 + 2*8*i]= 2297 nnz_cache[3+8* 7 + 2*8*i]= 2298 nnz_cache[3+8*11 + 2*8*i]= 2299 nnz_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0; 2300 } 2301 } 2302 if (h->top_type && !IS_8x8DCT(h->top_type)){ 2303 uint32_t top_empty = CABAC && !IS_INTRA(mb_type) ? 0 : 0x40404040; 2304 AV_WN32A(&nnz_cache[4+8* 0], top_empty); 2305 AV_WN32A(&nnz_cache[4+8* 5], top_empty); 2306 AV_WN32A(&nnz_cache[4+8*10], top_empty); 2307 } 2308 } 2309 s->current_picture.f.mb_type[mb_xy] = mb_type; 2310 2311 if( cbp || IS_INTRA16x16( mb_type ) ) { 2312 const uint8_t *scan, *scan8x8; 2313 const uint32_t *qmul; 2314 2315 if(IS_INTERLACED(mb_type)){ 2316 scan8x8= s->qscale ? h->field_scan8x8 : h->field_scan8x8_q0; 2317 scan= s->qscale ? h->field_scan : h->field_scan_q0; 2318 }else{ 2319 scan8x8= s->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0; 2320 scan= s->qscale ? h->zigzag_scan : h->zigzag_scan_q0; 2321 } 2322 2323 // decode_cabac_mb_dqp 2324 if(get_cabac_noinline( &h->cabac, &h->cabac_state[60 + (h->last_qscale_diff != 0)])){ 2325 int val = 1; 2326 int ctx= 2; 2327 const int max_qp = 51 + 6*(h->sps.bit_depth_luma-8); 2328 2329 while( get_cabac_noinline( &h->cabac, &h->cabac_state[60 + ctx] ) ) { 2330 ctx= 3; 2331 val++; 2332 if(val > 2*max_qp){ //prevent infinite loop 2333 av_log(h->s.avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", s->mb_x, s->mb_y); 2334 return -1; 2335 } 2336 } 2337 2338 if( val&0x01 ) 2339 val= (val + 1)>>1 ; 2340 else 2341 val= -((val + 1)>>1); 2342 h->last_qscale_diff = val; 2343 s->qscale += val; 2344 if(((unsigned)s->qscale) > max_qp){ 2345 if(s->qscale<0) s->qscale+= max_qp+1; 2346 else s->qscale-= max_qp+1; 2347 } 2348 h->chroma_qp[0] = get_chroma_qp(h, 0, s->qscale); 2349 h->chroma_qp[1] = get_chroma_qp(h, 1, s->qscale); 2350 }else 2351 h->last_qscale_diff=0; 2352 2353 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 0); 2354 if(CHROMA444){ 2355 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 1); 2356 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 2); 2357 } else if (CHROMA422) { 2358 if( cbp&0x30 ){ 2359 int c; 2360 for( c = 0; c < 2; c++ ) { 2361 //av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-DC\n",c ); 2362 decode_cabac_residual_dc_422(h, h->mb + ((256 + 16*16*c) << pixel_shift), 3, 2363 CHROMA_DC_BLOCK_INDEX + c, 2364 chroma422_dc_scan, 8); 2365 } 2366 } 2367 2368 if( cbp&0x20 ) { 2369 int c, i, i8x8; 2370 for( c = 0; c < 2; c++ ) { 2371 DCTELEM *mb = h->mb + (16*(16 + 16*c) << pixel_shift); 2372 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[c]]; 2373 for (i8x8 = 0; i8x8 < 2; i8x8++) { 2374 for (i = 0; i < 4; i++) { 2375 const int index = 16 + 16 * c + 8*i8x8 + i; 2376 //av_log(s->avctx, AV_LOG_ERROR, "INTRA C%d-AC %d\n",c, index - 16); 2377 decode_cabac_residual_nondc(h, mb, 4, index, scan + 1, qmul, 15); 2378 mb += 16<<pixel_shift; 2379 } 2380 } 2381 } 2382 } else { 2383 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1); 2384 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1); 2385 } 2386 } else /* yuv420 */ { 2387 if( cbp&0x30 ){ 2388 int c; 2389 for( c = 0; c < 2; c++ ) { 2390 //av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-DC\n",c ); 2391 decode_cabac_residual_dc(h, h->mb + ((256 + 16*16*c) << pixel_shift), 3, CHROMA_DC_BLOCK_INDEX+c, chroma_dc_scan, 4); 2392 } 2393 } 2394 2395 if( cbp&0x20 ) { 2396 int c, i; 2397 for( c = 0; c < 2; c++ ) { 2398 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[c]]; 2399 for( i = 0; i < 4; i++ ) { 2400 const int index = 16 + 16 * c + i; 2401 //av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-AC %d\n",c, index - 16 ); 2402 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15); 2403 } 2404 } 2405 } else { 2406 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1); 2407 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1); 2408 } 2409 } 2410 } else { 2411 fill_rectangle(&h->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1); 2412 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1); 2413 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1); 2414 h->last_qscale_diff = 0; 2415 } 2416 2417 s->current_picture.f.qscale_table[mb_xy] = s->qscale; 2418 write_back_non_zero_count(h); 2419 2420 if(MB_MBAFF){ 2421 h->ref_count[0] >>= 1; 2422 h->ref_count[1] >>= 1; 2423 } 2424 2425 return 0; 2426} 2427