annotate ffmpeg/libavcodec/h264_cabac.c @ 13:844d341cf643 tip

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