Libav 0.7.1
|
00001 /* 00002 * H.26L/H.264/AVC/JVT/14496-10/... cabac decoding 00003 * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at> 00004 * 00005 * This file is part of Libav. 00006 * 00007 * Libav is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU Lesser General Public 00009 * License as published by the Free Software Foundation; either 00010 * version 2.1 of the License, or (at your option) any later version. 00011 * 00012 * Libav is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * Lesser General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public 00018 * License along with Libav; if not, write to the Free Software 00019 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00020 */ 00021 00028 #define CABAC 1 00029 00030 #include "internal.h" 00031 #include "dsputil.h" 00032 #include "avcodec.h" 00033 #include "h264.h" 00034 #include "h264data.h" 00035 #include "h264_mvpred.h" 00036 #include "golomb.h" 00037 00038 #include "cabac.h" 00039 #if ARCH_X86 00040 #include "x86/h264_i386.h" 00041 #endif 00042 00043 //#undef NDEBUG 00044 #include <assert.h> 00045 00046 /* Cabac pre state table */ 00047 00048 static const int8_t cabac_context_init_I[1024][2] = 00049 { 00050 /* 0 - 10 */ 00051 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 }, 00052 { 2, 54 }, { 3, 74 }, { -28,127 }, { -23, 104 }, 00053 { -6, 53 }, { -1, 54 }, { 7, 51 }, 00054 00055 /* 11 - 23 unsused for I */ 00056 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, 00057 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, 00058 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, 00059 { 0, 0 }, 00060 00061 /* 24- 39 */ 00062 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, 00063 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, 00064 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, 00065 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, 00066 00067 /* 40 - 53 */ 00068 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, 00069 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, 00070 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, 00071 { 0, 0 }, { 0, 0 }, 00072 00073 /* 54 - 59 */ 00074 { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, 00075 { 0, 0 }, { 0, 0 }, 00076 00077 /* 60 - 69 */ 00078 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 }, 00079 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 }, 00080 { 13, 41 }, { 3, 62 }, 00081 00082 /* 70 -> 87 */ 00083 { 0, 11 }, { 1, 55 }, { 0, 69 }, { -17, 127 }, 00084 { -13, 102 },{ 0, 82 }, { -7, 74 }, { -21, 107 }, 00085 { -27, 127 },{ -31, 127 },{ -24, 127 }, { -18, 95 }, 00086 { -27, 127 },{ -21, 114 },{ -30, 127 }, { -17, 123 }, 00087 { -12, 115 },{ -16, 122 }, 00088 00089 /* 88 -> 104 */ 00090 { -11, 115 },{ -12, 63 }, { -2, 68 }, { -15, 84 }, 00091 { -13, 104 },{ -3, 70 }, { -8, 93 }, { -10, 90 }, 00092 { -30, 127 },{ -1, 74 }, { -6, 97 }, { -7, 91 }, 00093 { -20, 127 },{ -4, 56 }, { -5, 82 }, { -7, 76 }, 00094 { -22, 125 }, 00095 00096 /* 105 -> 135 */ 00097 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 }, 00098 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 }, 00099 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 }, 00100 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 }, 00101 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 }, 00102 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 }, 00103 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 }, 00104 { 14, 62 }, { -13, 108 },{ -15, 100 }, 00105 00106 /* 136 -> 165 */ 00107 { -13, 101 },{ -13, 91 }, { -12, 94 }, { -10, 88 }, 00108 { -16, 84 }, { -10, 86 }, { -7, 83 }, { -13, 87 }, 00109 { -19, 94 }, { 1, 70 }, { 0, 72 }, { -5, 74 }, 00110 { 18, 59 }, { -8, 102 }, { -15, 100 }, { 0, 95 }, 00111 { -4, 75 }, { 2, 72 }, { -11, 75 }, { -3, 71 }, 00112 { 15, 46 }, { -13, 69 }, { 0, 62 }, { 0, 65 }, 00113 { 21, 37 }, { -15, 72 }, { 9, 57 }, { 16, 54 }, 00114 { 0, 62 }, { 12, 72 }, 00115 00116 /* 166 -> 196 */ 00117 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 }, 00118 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 }, 00119 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 }, 00120 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 }, 00121 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 }, 00122 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 }, 00123 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 }, 00124 { 0, 89 }, { 26, -19 }, { 22, -17 }, 00125 00126 /* 197 -> 226 */ 00127 { 26, -17 }, { 30, -25 }, { 28, -20 }, { 33, -23 }, 00128 { 37, -27 }, { 33, -23 }, { 40, -28 }, { 38, -17 }, 00129 { 33, -11 }, { 40, -15 }, { 41, -6 }, { 38, 1 }, 00130 { 41, 17 }, { 30, -6 }, { 27, 3 }, { 26, 22 }, 00131 { 37, -16 }, { 35, -4 }, { 38, -8 }, { 38, -3 }, 00132 { 37, 3 }, { 38, 5 }, { 42, 0 }, { 35, 16 }, 00133 { 39, 22 }, { 14, 48 }, { 27, 37 }, { 21, 60 }, 00134 { 12, 68 }, { 2, 97 }, 00135 00136 /* 227 -> 251 */ 00137 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 }, 00138 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 }, 00139 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 }, 00140 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 }, 00141 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 }, 00142 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 }, 00143 { -4, 65 }, 00144 00145 /* 252 -> 275 */ 00146 { -12, 73 }, { -8, 76 }, { -7, 80 }, { -9, 88 }, 00147 { -17, 110 },{ -11, 97 }, { -20, 84 }, { -11, 79 }, 00148 { -6, 73 }, { -4, 74 }, { -13, 86 }, { -13, 96 }, 00149 { -11, 97 }, { -19, 117 },{ -8, 78 }, { -5, 33 }, 00150 { -4, 48 }, { -2, 53 }, { -3, 62 }, { -13, 71 }, 00151 { -10, 79 }, { -12, 86 }, { -13, 90 }, { -14, 97 }, 00152 00153 /* 276 a bit special (not used, bypass is used instead) */ 00154 { 0, 0 }, 00155 00156 /* 277 -> 307 */ 00157 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 }, 00158 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 }, 00159 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 }, 00160 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 }, 00161 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 }, 00162 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 }, 00163 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 }, 00164 { 9, 64 }, { -12, 104 },{ -11, 97 }, 00165 00166 /* 308 -> 337 */ 00167 { -16, 96 }, { -7, 88 }, { -8, 85 }, { -7, 85 }, 00168 { -9, 85 }, { -13, 88 }, { 4, 66 }, { -3, 77 }, 00169 { -3, 76 }, { -6, 76 }, { 10, 58 }, { -1, 76 }, 00170 { -1, 83 }, { -7, 99 }, { -14, 95 }, { 2, 95 }, 00171 { 0, 76 }, { -5, 74 }, { 0, 70 }, { -11, 75 }, 00172 { 1, 68 }, { 0, 65 }, { -14, 73 }, { 3, 62 }, 00173 { 4, 62 }, { -1, 68 }, { -13, 75 }, { 11, 55 }, 00174 { 5, 64 }, { 12, 70 }, 00175 00176 /* 338 -> 368 */ 00177 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 }, 00178 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 }, 00179 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 }, 00180 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 }, 00181 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 }, 00182 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 }, 00183 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 }, 00184 { -12, 109 },{ 36, -35 }, { 36, -34 }, 00185 00186 /* 369 -> 398 */ 00187 { 32, -26 }, { 37, -30 }, { 44, -32 }, { 34, -18 }, 00188 { 34, -15 }, { 40, -15 }, { 33, -7 }, { 35, -5 }, 00189 { 33, 0 }, { 38, 2 }, { 33, 13 }, { 23, 35 }, 00190 { 13, 58 }, { 29, -3 }, { 26, 0 }, { 22, 30 }, 00191 { 31, -7 }, { 35, -15 }, { 34, -3 }, { 34, 3 }, 00192 { 36, -1 }, { 34, 5 }, { 32, 11 }, { 35, 5 }, 00193 { 34, 12 }, { 39, 11 }, { 30, 29 }, { 34, 26 }, 00194 { 29, 39 }, { 19, 66 }, 00195 00196 /* 399 -> 435 */ 00197 { 31, 21 }, { 31, 31 }, { 25, 50 }, 00198 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 }, 00199 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 }, 00200 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 }, 00201 { -23, 68 }, { -24, 50 }, { -11, 74 }, { 23, -13 }, 00202 { 26, -13 }, { 40, -15 }, { 49, -14 }, { 44, 3 }, 00203 { 45, 6 }, { 44, 34 }, { 33, 54 }, { 19, 82 }, 00204 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 }, 00205 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 }, 00206 { 0, 68 }, { -9, 92 }, 00207 00208 /* 436 -> 459 */ 00209 { -14, 106 }, { -13, 97 }, { -15, 90 }, { -12, 90 }, 00210 { -18, 88 }, { -10, 73 }, { -9, 79 }, { -14, 86 }, 00211 { -10, 73 }, { -10, 70 }, { -10, 69 }, { -5, 66 }, 00212 { -9, 64 }, { -5, 58 }, { 2, 59 }, { 21, -10 }, 00213 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 }, 00214 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 }, 00215 00216 /* 460 -> 1024 */ 00217 { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 }, 00218 { -12, 63 }, { -2, 68 }, { -15, 84 }, { -13, 104 }, 00219 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 }, 00220 { -17, 123 }, { -12, 115 }, { -16, 122 }, { -11, 115 }, 00221 { -12, 63 }, { -2, 68 }, { -15, 84 }, { -13, 104 }, 00222 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 }, 00223 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 }, 00224 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 }, 00225 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 }, 00226 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 }, 00227 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 }, 00228 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 }, 00229 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 }, 00230 { 14, 62 }, { -13, 108 }, { -15, 100 }, { -13, 101 }, 00231 { -13, 91 }, { -12, 94 }, { -10, 88 }, { -16, 84 }, 00232 { -10, 86 }, { -7, 83 }, { -13, 87 }, { -19, 94 }, 00233 { 1, 70 }, { 0, 72 }, { -5, 74 }, { 18, 59 }, 00234 { -7, 93 }, { -11, 87 }, { -3, 77 }, { -5, 71 }, 00235 { -4, 63 }, { -4, 68 }, { -12, 84 }, { -7, 62 }, 00236 { -7, 65 }, { 8, 61 }, { 5, 56 }, { -2, 66 }, 00237 { 1, 64 }, { 0, 61 }, { -2, 78 }, { 1, 50 }, 00238 { 7, 52 }, { 10, 35 }, { 0, 44 }, { 11, 38 }, 00239 { 1, 45 }, { 0, 46 }, { 5, 44 }, { 31, 17 }, 00240 { 1, 51 }, { 7, 50 }, { 28, 19 }, { 16, 33 }, 00241 { 14, 62 }, { -13, 108 }, { -15, 100 }, { -13, 101 }, 00242 { -13, 91 }, { -12, 94 }, { -10, 88 }, { -16, 84 }, 00243 { -10, 86 }, { -7, 83 }, { -13, 87 }, { -19, 94 }, 00244 { 1, 70 }, { 0, 72 }, { -5, 74 }, { 18, 59 }, 00245 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 }, 00246 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 }, 00247 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 }, 00248 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 }, 00249 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 }, 00250 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 }, 00251 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 }, 00252 { 0, 89 }, { 26, -19 }, { 22, -17 }, { 26, -17 }, 00253 { 30, -25 }, { 28, -20 }, { 33, -23 }, { 37, -27 }, 00254 { 33, -23 }, { 40, -28 }, { 38, -17 }, { 33, -11 }, 00255 { 40, -15 }, { 41, -6 }, { 38, 1 }, { 41, 17 }, 00256 { 24, 0 }, { 15, 9 }, { 8, 25 }, { 13, 18 }, 00257 { 15, 9 }, { 13, 19 }, { 10, 37 }, { 12, 18 }, 00258 { 6, 29 }, { 20, 33 }, { 15, 30 }, { 4, 45 }, 00259 { 1, 58 }, { 0, 62 }, { 7, 61 }, { 12, 38 }, 00260 { 11, 45 }, { 15, 39 }, { 11, 42 }, { 13, 44 }, 00261 { 16, 45 }, { 12, 41 }, { 10, 49 }, { 30, 34 }, 00262 { 18, 42 }, { 10, 55 }, { 17, 51 }, { 17, 46 }, 00263 { 0, 89 }, { 26, -19 }, { 22, -17 }, { 26, -17 }, 00264 { 30, -25 }, { 28, -20 }, { 33, -23 }, { 37, -27 }, 00265 { 33, -23 }, { 40, -28 }, { 38, -17 }, { 33, -11 }, 00266 { 40, -15 }, { 41, -6 }, { 38, 1 }, { 41, 17 }, 00267 { -17, 120 }, { -20, 112 }, { -18, 114 }, { -11, 85 }, 00268 { -15, 92 }, { -14, 89 }, { -26, 71 }, { -15, 81 }, 00269 { -14, 80 }, { 0, 68 }, { -14, 70 }, { -24, 56 }, 00270 { -23, 68 }, { -24, 50 }, { -11, 74 }, { -14, 106 }, 00271 { -13, 97 }, { -15, 90 }, { -12, 90 }, { -18, 88 }, 00272 { -10, 73 }, { -9, 79 }, { -14, 86 }, { -10, 73 }, 00273 { -10, 70 }, { -10, 69 }, { -5, 66 }, { -9, 64 }, 00274 { -5, 58 }, { 2, 59 }, { 23, -13 }, { 26, -13 }, 00275 { 40, -15 }, { 49, -14 }, { 44, 3 }, { 45, 6 }, 00276 { 44, 34 }, { 33, 54 }, { 19, 82 }, { 21, -10 }, 00277 { 24, -11 }, { 28, -8 }, { 28, -1 }, { 29, 3 }, 00278 { 29, 9 }, { 35, 20 }, { 29, 36 }, { 14, 67 }, 00279 { -3, 75 }, { -1, 23 }, { 1, 34 }, { 1, 43 }, 00280 { 0, 54 }, { -2, 55 }, { 0, 61 }, { 1, 64 }, 00281 { 0, 68 }, { -9, 92 }, { -17, 120 }, { -20, 112 }, 00282 { -18, 114 }, { -11, 85 }, { -15, 92 }, { -14, 89 }, 00283 { -26, 71 }, { -15, 81 }, { -14, 80 }, { 0, 68 }, 00284 { -14, 70 }, { -24, 56 }, { -23, 68 }, { -24, 50 }, 00285 { -11, 74 }, { -14, 106 }, { -13, 97 }, { -15, 90 }, 00286 { -12, 90 }, { -18, 88 }, { -10, 73 }, { -9, 79 }, 00287 { -14, 86 }, { -10, 73 }, { -10, 70 }, { -10, 69 }, 00288 { -5, 66 }, { -9, 64 }, { -5, 58 }, { 2, 59 }, 00289 { 23, -13 }, { 26, -13 }, { 40, -15 }, { 49, -14 }, 00290 { 44, 3 }, { 45, 6 }, { 44, 34 }, { 33, 54 }, 00291 { 19, 82 }, { 21, -10 }, { 24, -11 }, { 28, -8 }, 00292 { 28, -1 }, { 29, 3 }, { 29, 9 }, { 35, 20 }, 00293 { 29, 36 }, { 14, 67 }, { -3, 75 }, { -1, 23 }, 00294 { 1, 34 }, { 1, 43 }, { 0, 54 }, { -2, 55 }, 00295 { 0, 61 }, { 1, 64 }, { 0, 68 }, { -9, 92 }, 00296 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 }, 00297 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 }, 00298 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 }, 00299 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 }, 00300 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 }, 00301 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 }, 00302 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 }, 00303 { 9, 64 }, { -12, 104 }, { -11, 97 }, { -16, 96 }, 00304 { -7, 88 }, { -8, 85 }, { -7, 85 }, { -9, 85 }, 00305 { -13, 88 }, { 4, 66 }, { -3, 77 }, { -3, 76 }, 00306 { -6, 76 }, { 10, 58 }, { -1, 76 }, { -1, 83 }, 00307 { -6, 93 }, { -6, 84 }, { -8, 79 }, { 0, 66 }, 00308 { -1, 71 }, { 0, 62 }, { -2, 60 }, { -2, 59 }, 00309 { -5, 75 }, { -3, 62 }, { -4, 58 }, { -9, 66 }, 00310 { -1, 79 }, { 0, 71 }, { 3, 68 }, { 10, 44 }, 00311 { -7, 62 }, { 15, 36 }, { 14, 40 }, { 16, 27 }, 00312 { 12, 29 }, { 1, 44 }, { 20, 36 }, { 18, 32 }, 00313 { 5, 42 }, { 1, 48 }, { 10, 62 }, { 17, 46 }, 00314 { 9, 64 }, { -12, 104 }, { -11, 97 }, { -16, 96 }, 00315 { -7, 88 }, { -8, 85 }, { -7, 85 }, { -9, 85 }, 00316 { -13, 88 }, { 4, 66 }, { -3, 77 }, { -3, 76 }, 00317 { -6, 76 }, { 10, 58 }, { -1, 76 }, { -1, 83 }, 00318 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 }, 00319 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 }, 00320 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 }, 00321 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 }, 00322 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 }, 00323 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 }, 00324 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 }, 00325 { -12, 109 }, { 36, -35 }, { 36, -34 }, { 32, -26 }, 00326 { 37, -30 }, { 44, -32 }, { 34, -18 }, { 34, -15 }, 00327 { 40, -15 }, { 33, -7 }, { 35, -5 }, { 33, 0 }, 00328 { 38, 2 }, { 33, 13 }, { 23, 35 }, { 13, 58 }, 00329 { 15, 6 }, { 6, 19 }, { 7, 16 }, { 12, 14 }, 00330 { 18, 13 }, { 13, 11 }, { 13, 15 }, { 15, 16 }, 00331 { 12, 23 }, { 13, 23 }, { 15, 20 }, { 14, 26 }, 00332 { 14, 44 }, { 17, 40 }, { 17, 47 }, { 24, 17 }, 00333 { 21, 21 }, { 25, 22 }, { 31, 27 }, { 22, 29 }, 00334 { 19, 35 }, { 14, 50 }, { 10, 57 }, { 7, 63 }, 00335 { -2, 77 }, { -4, 82 }, { -3, 94 }, { 9, 69 }, 00336 { -12, 109 }, { 36, -35 }, { 36, -34 }, { 32, -26 }, 00337 { 37, -30 }, { 44, -32 }, { 34, -18 }, { 34, -15 }, 00338 { 40, -15 }, { 33, -7 }, { 35, -5 }, { 33, 0 }, 00339 { 38, 2 }, { 33, 13 }, { 23, 35 }, { 13, 58 }, 00340 { -3, 71 }, { -6, 42 }, { -5, 50 }, { -3, 54 }, 00341 { -2, 62 }, { 0, 58 }, { 1, 63 }, { -2, 72 }, 00342 { -1, 74 }, { -9, 91 }, { -5, 67 }, { -5, 27 }, 00343 { -3, 39 }, { -2, 44 }, { 0, 46 }, { -16, 64 }, 00344 { -8, 68 }, { -10, 78 }, { -6, 77 }, { -10, 86 }, 00345 { -12, 92 }, { -15, 55 }, { -10, 60 }, { -6, 62 }, 00346 { -4, 65 }, { -12, 73 }, { -8, 76 }, { -7, 80 }, 00347 { -9, 88 }, { -17, 110 }, { -3, 71 }, { -6, 42 }, 00348 { -5, 50 }, { -3, 54 }, { -2, 62 }, { 0, 58 }, 00349 { 1, 63 }, { -2, 72 }, { -1, 74 }, { -9, 91 }, 00350 { -5, 67 }, { -5, 27 }, { -3, 39 }, { -2, 44 }, 00351 { 0, 46 }, { -16, 64 }, { -8, 68 }, { -10, 78 }, 00352 { -6, 77 }, { -10, 86 }, { -12, 92 }, { -15, 55 }, 00353 { -10, 60 }, { -6, 62 }, { -4, 65 }, { -12, 73 }, 00354 { -8, 76 }, { -7, 80 }, { -9, 88 }, { -17, 110 }, 00355 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 }, 00356 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 }, 00357 { -3, 70 }, { -8, 93 }, { -10, 90 }, { -30, 127 } 00358 }; 00359 00360 static const int8_t cabac_context_init_PB[3][1024][2] = 00361 { 00362 /* i_cabac_init_idc == 0 */ 00363 { 00364 /* 0 - 10 */ 00365 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 }, 00366 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 }, 00367 { -6, 53 }, { -1, 54 }, { 7, 51 }, 00368 00369 /* 11 - 23 */ 00370 { 23, 33 }, { 23, 2 }, { 21, 0 }, { 1, 9 }, 00371 { 0, 49 }, { -37, 118 }, { 5, 57 }, { -13, 78 }, 00372 { -11, 65 }, { 1, 62 }, { 12, 49 }, { -4, 73 }, 00373 { 17, 50 }, 00374 00375 /* 24 - 39 */ 00376 { 18, 64 }, { 9, 43 }, { 29, 0 }, { 26, 67 }, 00377 { 16, 90 }, { 9, 104 }, { -46, 127 }, { -20, 104 }, 00378 { 1, 67 }, { -13, 78 }, { -11, 65 }, { 1, 62 }, 00379 { -6, 86 }, { -17, 95 }, { -6, 61 }, { 9, 45 }, 00380 00381 /* 40 - 53 */ 00382 { -3, 69 }, { -6, 81 }, { -11, 96 }, { 6, 55 }, 00383 { 7, 67 }, { -5, 86 }, { 2, 88 }, { 0, 58 }, 00384 { -3, 76 }, { -10, 94 }, { 5, 54 }, { 4, 69 }, 00385 { -3, 81 }, { 0, 88 }, 00386 00387 /* 54 - 59 */ 00388 { -7, 67 }, { -5, 74 }, { -4, 74 }, { -5, 80 }, 00389 { -7, 72 }, { 1, 58 }, 00390 00391 /* 60 - 69 */ 00392 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 }, 00393 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 }, 00394 { 13, 41 }, { 3, 62 }, 00395 00396 /* 70 - 87 */ 00397 { 0, 45 }, { -4, 78 }, { -3, 96 }, { -27, 126 }, 00398 { -28, 98 }, { -25, 101 }, { -23, 67 }, { -28, 82 }, 00399 { -20, 94 }, { -16, 83 }, { -22, 110 }, { -21, 91 }, 00400 { -18, 102 }, { -13, 93 }, { -29, 127 }, { -7, 92 }, 00401 { -5, 89 }, { -7, 96 }, { -13, 108 }, { -3, 46 }, 00402 { -1, 65 }, { -1, 57 }, { -9, 93 }, { -3, 74 }, 00403 { -9, 92 }, { -8, 87 }, { -23, 126 }, { 5, 54 }, 00404 { 6, 60 }, { 6, 59 }, { 6, 69 }, { -1, 48 }, 00405 { 0, 68 }, { -4, 69 }, { -8, 88 }, 00406 00407 /* 105 -> 165 */ 00408 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 }, 00409 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 }, 00410 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 }, 00411 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 }, 00412 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 }, 00413 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 }, 00414 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 }, 00415 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 }, 00416 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 }, 00417 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 }, 00418 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 }, 00419 { 3, 64 }, { 1, 61 }, { 9, 63 }, { 7, 50 }, 00420 { 16, 39 }, { 5, 44 }, { 4, 52 }, { 11, 48 }, 00421 { -5, 60 }, { -1, 59 }, { 0, 59 }, { 22, 33 }, 00422 { 5, 44 }, { 14, 43 }, { -1, 78 }, { 0, 60 }, 00423 { 9, 69 }, 00424 00425 /* 166 - 226 */ 00426 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 }, 00427 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 }, 00428 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 }, 00429 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 }, 00430 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 }, 00431 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 }, 00432 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 }, 00433 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 }, 00434 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 }, 00435 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 }, 00436 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 }, 00437 { 1, 67 }, { 5, 59 }, { 9, 67 }, { 16, 30 }, 00438 { 18, 32 }, { 18, 35 }, { 22, 29 }, { 24, 31 }, 00439 { 23, 38 }, { 18, 43 }, { 20, 41 }, { 11, 63 }, 00440 { 9, 59 }, { 9, 64 }, { -1, 94 }, { -2, 89 }, 00441 { -9, 108 }, 00442 00443 /* 227 - 275 */ 00444 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 }, 00445 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 }, 00446 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 }, 00447 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 }, 00448 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 }, 00449 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 }, 00450 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 }, 00451 { -3, 74 }, { -10, 90 }, { 0, 70 }, { -4, 29 }, 00452 { 5, 31 }, { 7, 42 }, { 1, 59 }, { -2, 58 }, 00453 { -3, 72 }, { -3, 81 }, { -11, 97 }, { 0, 58 }, 00454 { 8, 5 }, { 10, 14 }, { 14, 18 }, { 13, 27 }, 00455 { 2, 40 }, { 0, 58 }, { -3, 70 }, { -6, 79 }, 00456 { -8, 85 }, 00457 00458 /* 276 a bit special (not used, bypass is used instead) */ 00459 { 0, 0 }, 00460 00461 /* 277 - 337 */ 00462 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 }, 00463 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 }, 00464 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 }, 00465 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 }, 00466 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 }, 00467 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 }, 00468 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 }, 00469 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 }, 00470 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 }, 00471 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 }, 00472 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 }, 00473 { -2, 69 }, { -2, 59 }, { 6, 70 }, { 10, 44 }, 00474 { 9, 31 }, { 12, 43 }, { 3, 53 }, { 14, 34 }, 00475 { 10, 38 }, { -3, 52 }, { 13, 40 }, { 17, 32 }, 00476 { 7, 44 }, { 7, 38 }, { 13, 50 }, { 10, 57 }, 00477 { 26, 43 }, 00478 00479 /* 338 - 398 */ 00480 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 }, 00481 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 }, 00482 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 }, 00483 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 }, 00484 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 }, 00485 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 }, 00486 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 }, 00487 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 }, 00488 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 }, 00489 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 }, 00490 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 }, 00491 { 8, 60 }, { 6, 63 }, { 17, 65 }, { 21, 24 }, 00492 { 23, 20 }, { 26, 23 }, { 27, 32 }, { 28, 23 }, 00493 { 28, 24 }, { 23, 40 }, { 24, 32 }, { 28, 29 }, 00494 { 23, 42 }, { 19, 57 }, { 22, 53 }, { 22, 61 }, 00495 { 11, 86 }, 00496 00497 /* 399 - 435 */ 00498 { 12, 40 }, { 11, 51 }, { 14, 59 }, 00499 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 }, 00500 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 }, 00501 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 }, 00502 { -16, 66 }, { -22, 65 }, { -20, 63 }, { 9, -2 }, 00503 { 26, -9 }, { 33, -9 }, { 39, -7 }, { 41, -2 }, 00504 { 45, 3 }, { 49, 9 }, { 45, 27 }, { 36, 59 }, 00505 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 }, 00506 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 }, 00507 { -8, 66 }, { -8, 76 }, 00508 00509 /* 436 - 459 */ 00510 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 }, 00511 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 }, 00512 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 }, 00513 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 21, -13 }, 00514 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 }, 00515 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 }, 00516 00517 /* 460 - 1024 */ 00518 { -7, 92 }, { -5, 89 }, { -7, 96 }, { -13, 108 }, 00519 { -3, 46 }, { -1, 65 }, { -1, 57 }, { -9, 93 }, 00520 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 }, 00521 { -7, 92 }, { -5, 89 }, { -7, 96 }, { -13, 108 }, 00522 { -3, 46 }, { -1, 65 }, { -1, 57 }, { -9, 93 }, 00523 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 }, 00524 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 }, 00525 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 }, 00526 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 }, 00527 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 }, 00528 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 }, 00529 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 }, 00530 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 }, 00531 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 }, 00532 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 }, 00533 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 }, 00534 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 }, 00535 { -2, 85 }, { -6, 78 }, { -1, 75 }, { -7, 77 }, 00536 { 2, 54 }, { 5, 50 }, { -3, 68 }, { 1, 50 }, 00537 { 6, 42 }, { -4, 81 }, { 1, 63 }, { -4, 70 }, 00538 { 0, 67 }, { 2, 57 }, { -2, 76 }, { 11, 35 }, 00539 { 4, 64 }, { 1, 61 }, { 11, 35 }, { 18, 25 }, 00540 { 12, 24 }, { 13, 29 }, { 13, 36 }, { -10, 93 }, 00541 { -7, 73 }, { -2, 73 }, { 13, 46 }, { 9, 49 }, 00542 { -7, 100 }, { 9, 53 }, { 2, 53 }, { 5, 53 }, 00543 { -2, 61 }, { 0, 56 }, { 0, 56 }, { -13, 63 }, 00544 { -5, 60 }, { -1, 62 }, { 4, 57 }, { -6, 69 }, 00545 { 4, 57 }, { 14, 39 }, { 4, 51 }, { 13, 68 }, 00546 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 }, 00547 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 }, 00548 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 }, 00549 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 }, 00550 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 }, 00551 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 }, 00552 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 }, 00553 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 }, 00554 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 }, 00555 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 }, 00556 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 }, 00557 { 11, 28 }, { 2, 40 }, { 3, 44 }, { 0, 49 }, 00558 { 0, 46 }, { 2, 44 }, { 2, 51 }, { 0, 47 }, 00559 { 4, 39 }, { 2, 62 }, { 6, 46 }, { 0, 54 }, 00560 { 3, 54 }, { 2, 58 }, { 4, 63 }, { 6, 51 }, 00561 { 6, 57 }, { 7, 53 }, { 6, 52 }, { 6, 55 }, 00562 { 11, 45 }, { 14, 36 }, { 8, 53 }, { -1, 82 }, 00563 { 7, 55 }, { -3, 78 }, { 15, 46 }, { 22, 31 }, 00564 { -1, 84 }, { 25, 7 }, { 30, -7 }, { 28, 3 }, 00565 { 28, 4 }, { 32, 0 }, { 34, -1 }, { 30, 6 }, 00566 { 30, 6 }, { 32, 9 }, { 31, 19 }, { 26, 27 }, 00567 { 26, 30 }, { 37, 20 }, { 28, 34 }, { 17, 70 }, 00568 { -4, 79 }, { -7, 71 }, { -5, 69 }, { -9, 70 }, 00569 { -8, 66 }, { -10, 68 }, { -19, 73 }, { -12, 69 }, 00570 { -16, 70 }, { -15, 67 }, { -20, 62 }, { -19, 70 }, 00571 { -16, 66 }, { -22, 65 }, { -20, 63 }, { -5, 85 }, 00572 { -6, 81 }, { -10, 77 }, { -7, 81 }, { -17, 80 }, 00573 { -18, 73 }, { -4, 74 }, { -10, 83 }, { -9, 71 }, 00574 { -9, 67 }, { -1, 61 }, { -8, 66 }, { -14, 66 }, 00575 { 0, 59 }, { 2, 59 }, { 9, -2 }, { 26, -9 }, 00576 { 33, -9 }, { 39, -7 }, { 41, -2 }, { 45, 3 }, 00577 { 49, 9 }, { 45, 27 }, { 36, 59 }, { 21, -13 }, 00578 { 33, -14 }, { 39, -7 }, { 46, -2 }, { 51, 2 }, 00579 { 60, 6 }, { 61, 17 }, { 55, 34 }, { 42, 62 }, 00580 { -6, 66 }, { -7, 35 }, { -7, 42 }, { -8, 45 }, 00581 { -5, 48 }, { -12, 56 }, { -6, 60 }, { -5, 62 }, 00582 { -8, 66 }, { -8, 76 }, { -4, 79 }, { -7, 71 }, 00583 { -5, 69 }, { -9, 70 }, { -8, 66 }, { -10, 68 }, 00584 { -19, 73 }, { -12, 69 }, { -16, 70 }, { -15, 67 }, 00585 { -20, 62 }, { -19, 70 }, { -16, 66 }, { -22, 65 }, 00586 { -20, 63 }, { -5, 85 }, { -6, 81 }, { -10, 77 }, 00587 { -7, 81 }, { -17, 80 }, { -18, 73 }, { -4, 74 }, 00588 { -10, 83 }, { -9, 71 }, { -9, 67 }, { -1, 61 }, 00589 { -8, 66 }, { -14, 66 }, { 0, 59 }, { 2, 59 }, 00590 { 9, -2 }, { 26, -9 }, { 33, -9 }, { 39, -7 }, 00591 { 41, -2 }, { 45, 3 }, { 49, 9 }, { 45, 27 }, 00592 { 36, 59 }, { 21, -13 }, { 33, -14 }, { 39, -7 }, 00593 { 46, -2 }, { 51, 2 }, { 60, 6 }, { 61, 17 }, 00594 { 55, 34 }, { 42, 62 }, { -6, 66 }, { -7, 35 }, 00595 { -7, 42 }, { -8, 45 }, { -5, 48 }, { -12, 56 }, 00596 { -6, 60 }, { -5, 62 }, { -8, 66 }, { -8, 76 }, 00597 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 }, 00598 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 }, 00599 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 }, 00600 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 }, 00601 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 }, 00602 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 }, 00603 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 }, 00604 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 }, 00605 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 }, 00606 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 }, 00607 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 }, 00608 { -13, 106 }, { -16, 106 }, { -10, 87 }, { -21, 114 }, 00609 { -18, 110 }, { -14, 98 }, { -22, 110 }, { -21, 106 }, 00610 { -18, 103 }, { -21, 107 }, { -23, 108 }, { -26, 112 }, 00611 { -10, 96 }, { -12, 95 }, { -5, 91 }, { -9, 93 }, 00612 { -22, 94 }, { -5, 86 }, { 9, 67 }, { -4, 80 }, 00613 { -10, 85 }, { -1, 70 }, { 7, 60 }, { 9, 58 }, 00614 { 5, 61 }, { 12, 50 }, { 15, 50 }, { 18, 49 }, 00615 { 17, 54 }, { 10, 41 }, { 7, 46 }, { -1, 51 }, 00616 { 7, 49 }, { 8, 52 }, { 9, 41 }, { 6, 47 }, 00617 { 2, 55 }, { 13, 41 }, { 10, 44 }, { 6, 50 }, 00618 { 5, 53 }, { 13, 49 }, { 4, 63 }, { 6, 64 }, 00619 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 }, 00620 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 }, 00621 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 }, 00622 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 }, 00623 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 }, 00624 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 }, 00625 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 }, 00626 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 }, 00627 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 }, 00628 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 }, 00629 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 }, 00630 { 14, 11 }, { 11, 14 }, { 9, 11 }, { 18, 11 }, 00631 { 21, 9 }, { 23, -2 }, { 32, -15 }, { 32, -15 }, 00632 { 34, -21 }, { 39, -23 }, { 42, -33 }, { 41, -31 }, 00633 { 46, -28 }, { 38, -12 }, { 21, 29 }, { 45, -24 }, 00634 { 53, -45 }, { 48, -26 }, { 65, -43 }, { 43, -19 }, 00635 { 39, -10 }, { 30, 9 }, { 18, 26 }, { 20, 27 }, 00636 { 0, 57 }, { -14, 82 }, { -5, 75 }, { -19, 97 }, 00637 { -35, 125 }, { 27, 0 }, { 28, 0 }, { 31, -4 }, 00638 { 27, 6 }, { 34, 8 }, { 30, 10 }, { 24, 22 }, 00639 { 33, 19 }, { 22, 32 }, { 26, 31 }, { 21, 41 }, 00640 { 26, 44 }, { 23, 47 }, { 16, 65 }, { 14, 71 }, 00641 { -6, 76 }, { -2, 44 }, { 0, 45 }, { 0, 52 }, 00642 { -3, 64 }, { -2, 59 }, { -4, 70 }, { -4, 75 }, 00643 { -8, 82 }, { -17, 102 }, { -9, 77 }, { 3, 24 }, 00644 { 0, 42 }, { 0, 48 }, { 0, 55 }, { -6, 59 }, 00645 { -7, 71 }, { -12, 83 }, { -11, 87 }, { -30, 119 }, 00646 { 1, 58 }, { -3, 29 }, { -1, 36 }, { 1, 38 }, 00647 { 2, 43 }, { -6, 55 }, { 0, 58 }, { 0, 64 }, 00648 { -3, 74 }, { -10, 90 }, { -6, 76 }, { -2, 44 }, 00649 { 0, 45 }, { 0, 52 }, { -3, 64 }, { -2, 59 }, 00650 { -4, 70 }, { -4, 75 }, { -8, 82 }, { -17, 102 }, 00651 { -9, 77 }, { 3, 24 }, { 0, 42 }, { 0, 48 }, 00652 { 0, 55 }, { -6, 59 }, { -7, 71 }, { -12, 83 }, 00653 { -11, 87 }, { -30, 119 }, { 1, 58 }, { -3, 29 }, 00654 { -1, 36 }, { 1, 38 }, { 2, 43 }, { -6, 55 }, 00655 { 0, 58 }, { 0, 64 }, { -3, 74 }, { -10, 90 }, 00656 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 }, 00657 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 }, 00658 { -3, 74 }, { -9, 92 }, { -8, 87 }, { -23, 126 } 00659 }, 00660 00661 /* i_cabac_init_idc == 1 */ 00662 { 00663 /* 0 - 10 */ 00664 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 }, 00665 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 }, 00666 { -6, 53 }, { -1, 54 }, { 7, 51 }, 00667 00668 /* 11 - 23 */ 00669 { 22, 25 }, { 34, 0 }, { 16, 0 }, { -2, 9 }, 00670 { 4, 41 }, { -29, 118 }, { 2, 65 }, { -6, 71 }, 00671 { -13, 79 }, { 5, 52 }, { 9, 50 }, { -3, 70 }, 00672 { 10, 54 }, 00673 00674 /* 24 - 39 */ 00675 { 26, 34 }, { 19, 22 }, { 40, 0 }, { 57, 2 }, 00676 { 41, 36 }, { 26, 69 }, { -45, 127 }, { -15, 101 }, 00677 { -4, 76 }, { -6, 71 }, { -13, 79 }, { 5, 52 }, 00678 { 6, 69 }, { -13, 90 }, { 0, 52 }, { 8, 43 }, 00679 00680 /* 40 - 53 */ 00681 { -2, 69 },{ -5, 82 },{ -10, 96 },{ 2, 59 }, 00682 { 2, 75 },{ -3, 87 },{ -3, 100 },{ 1, 56 }, 00683 { -3, 74 },{ -6, 85 },{ 0, 59 },{ -3, 81 }, 00684 { -7, 86 },{ -5, 95 }, 00685 00686 /* 54 - 59 */ 00687 { -1, 66 },{ -1, 77 },{ 1, 70 },{ -2, 86 }, 00688 { -5, 72 },{ 0, 61 }, 00689 00690 /* 60 - 69 */ 00691 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 }, 00692 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 }, 00693 { 13, 41 }, { 3, 62 }, 00694 00695 /* 70 - 104 */ 00696 { 13, 15 }, { 7, 51 }, { 2, 80 }, { -39, 127 }, 00697 { -18, 91 }, { -17, 96 }, { -26, 81 }, { -35, 98 }, 00698 { -24, 102 }, { -23, 97 }, { -27, 119 }, { -24, 99 }, 00699 { -21, 110 }, { -18, 102 }, { -36, 127 }, { 0, 80 }, 00700 { -5, 89 }, { -7, 94 }, { -4, 92 }, { 0, 39 }, 00701 { 0, 65 }, { -15, 84 }, { -35, 127 }, { -2, 73 }, 00702 { -12, 104 }, { -9, 91 }, { -31, 127 }, { 3, 55 }, 00703 { 7, 56 }, { 7, 55 }, { 8, 61 }, { -3, 53 }, 00704 { 0, 68 }, { -7, 74 }, { -9, 88 }, 00705 00706 /* 105 -> 165 */ 00707 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 }, 00708 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 }, 00709 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 }, 00710 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 }, 00711 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 }, 00712 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 }, 00713 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 }, 00714 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 }, 00715 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 }, 00716 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 }, 00717 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 }, 00718 { -4, 71 }, { 0, 58 }, { 7, 61 }, { 9, 41 }, 00719 { 18, 25 }, { 9, 32 }, { 5, 43 }, { 9, 47 }, 00720 { 0, 44 }, { 0, 51 }, { 2, 46 }, { 19, 38 }, 00721 { -4, 66 }, { 15, 38 }, { 12, 42 }, { 9, 34 }, 00722 { 0, 89 }, 00723 00724 /* 166 - 226 */ 00725 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 }, 00726 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 }, 00727 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 }, 00728 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 }, 00729 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 }, 00730 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 }, 00731 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 }, 00732 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 }, 00733 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 }, 00734 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 }, 00735 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 }, 00736 { 0, 75 }, { 2, 72 }, { 8, 77 }, { 14, 35 }, 00737 { 18, 31 }, { 17, 35 }, { 21, 30 }, { 17, 45 }, 00738 { 20, 42 }, { 18, 45 }, { 27, 26 }, { 16, 54 }, 00739 { 7, 66 }, { 16, 56 }, { 11, 73 }, { 10, 67 }, 00740 { -10, 116 }, 00741 00742 /* 227 - 275 */ 00743 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 }, 00744 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 }, 00745 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 }, 00746 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 }, 00747 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 }, 00748 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 }, 00749 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 }, 00750 { -5, 74 }, { -9, 86 }, { 2, 66 }, { -9, 34 }, 00751 { 1, 32 }, { 11, 31 }, { 5, 52 }, { -2, 55 }, 00752 { -2, 67 }, { 0, 73 }, { -8, 89 }, { 3, 52 }, 00753 { 7, 4 }, { 10, 8 }, { 17, 8 }, { 16, 19 }, 00754 { 3, 37 }, { -1, 61 }, { -5, 73 }, { -1, 70 }, 00755 { -4, 78 }, 00756 00757 /* 276 a bit special (not used, bypass is used instead) */ 00758 { 0, 0 }, 00759 00760 /* 277 - 337 */ 00761 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 }, 00762 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 }, 00763 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 }, 00764 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 }, 00765 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 }, 00766 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 }, 00767 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 }, 00768 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 }, 00769 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 }, 00770 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 }, 00771 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 }, 00772 { -1, 70 }, { -9, 72 }, { 14, 60 }, { 16, 37 }, 00773 { 0, 47 }, { 18, 35 }, { 11, 37 }, { 12, 41 }, 00774 { 10, 41 }, { 2, 48 }, { 12, 41 }, { 13, 41 }, 00775 { 0, 59 }, { 3, 50 }, { 19, 40 }, { 3, 66 }, 00776 { 18, 50 }, 00777 00778 /* 338 - 398 */ 00779 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 }, 00780 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 }, 00781 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 }, 00782 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 }, 00783 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 }, 00784 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 }, 00785 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 }, 00786 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 }, 00787 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 }, 00788 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 }, 00789 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 }, 00790 { 12, 48 }, { 11, 49 }, { 26, 45 }, { 22, 22 }, 00791 { 23, 22 }, { 27, 21 }, { 33, 20 }, { 26, 28 }, 00792 { 30, 24 }, { 27, 34 }, { 18, 42 }, { 25, 39 }, 00793 { 18, 50 }, { 12, 70 }, { 21, 54 }, { 14, 71 }, 00794 { 11, 83 }, 00795 00796 /* 399 - 435 */ 00797 { 25, 32 }, { 21, 49 }, { 21, 54 }, 00798 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 }, 00799 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 }, 00800 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 }, 00801 { -14, 66 }, { 0, 59 }, { 2, 59 }, { 17, -10 }, 00802 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 }, 00803 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 }, 00804 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 }, 00805 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 }, 00806 { -4, 67 }, { -7, 82 }, 00807 00808 /* 436 - 459 */ 00809 { -3, 81 }, { -3, 76 }, { -7, 72 }, { -6, 78 }, 00810 { -12, 72 }, { -14, 68 }, { -3, 70 }, { -6, 76 }, 00811 { -5, 66 }, { -5, 62 }, { 0, 57 }, { -4, 61 }, 00812 { -9, 60 }, { 1, 54 }, { 2, 58 }, { 17, -10 }, 00813 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 }, 00814 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 }, 00815 00816 /* 460 - 1024 */ 00817 { 0, 80 }, { -5, 89 }, { -7, 94 }, { -4, 92 }, 00818 { 0, 39 }, { 0, 65 }, { -15, 84 }, { -35, 127 }, 00819 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 }, 00820 { 0, 80 }, { -5, 89 }, { -7, 94 }, { -4, 92 }, 00821 { 0, 39 }, { 0, 65 }, { -15, 84 }, { -35, 127 }, 00822 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 }, 00823 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 }, 00824 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 }, 00825 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 }, 00826 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 }, 00827 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 }, 00828 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 }, 00829 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 }, 00830 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 }, 00831 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 }, 00832 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 }, 00833 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 }, 00834 { -13, 103 }, { -13, 91 }, { -9, 89 }, { -14, 92 }, 00835 { -8, 76 }, { -12, 87 }, { -23, 110 }, { -24, 105 }, 00836 { -10, 78 }, { -20, 112 }, { -17, 99 }, { -78, 127 }, 00837 { -70, 127 }, { -50, 127 }, { -46, 127 }, { -4, 66 }, 00838 { -5, 78 }, { -4, 71 }, { -8, 72 }, { 2, 59 }, 00839 { -1, 55 }, { -7, 70 }, { -6, 75 }, { -8, 89 }, 00840 { -34, 119 }, { -3, 75 }, { 32, 20 }, { 30, 22 }, 00841 { -44, 127 }, { 0, 54 }, { -5, 61 }, { 0, 58 }, 00842 { -1, 60 }, { -3, 61 }, { -8, 67 }, { -25, 84 }, 00843 { -14, 74 }, { -5, 65 }, { 5, 52 }, { 2, 57 }, 00844 { 0, 61 }, { -9, 69 }, { -11, 70 }, { 18, 55 }, 00845 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 }, 00846 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 }, 00847 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 }, 00848 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 }, 00849 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 }, 00850 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 }, 00851 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 }, 00852 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 }, 00853 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 }, 00854 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 }, 00855 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 }, 00856 { 4, 45 }, { 10, 28 }, { 10, 31 }, { 33, -11 }, 00857 { 52, -43 }, { 18, 15 }, { 28, 0 }, { 35, -22 }, 00858 { 38, -25 }, { 34, 0 }, { 39, -18 }, { 32, -12 }, 00859 { 102, -94 }, { 0, 0 }, { 56, -15 }, { 33, -4 }, 00860 { 29, 10 }, { 37, -5 }, { 51, -29 }, { 39, -9 }, 00861 { 52, -34 }, { 69, -58 }, { 67, -63 }, { 44, -5 }, 00862 { 32, 7 }, { 55, -29 }, { 32, 1 }, { 0, 0 }, 00863 { 27, 36 }, { 33, -25 }, { 34, -30 }, { 36, -28 }, 00864 { 38, -28 }, { 38, -27 }, { 34, -18 }, { 35, -16 }, 00865 { 34, -14 }, { 32, -8 }, { 37, -6 }, { 35, 0 }, 00866 { 30, 10 }, { 28, 18 }, { 26, 25 }, { 29, 41 }, 00867 { -5, 85 }, { -6, 81 }, { -10, 77 }, { -7, 81 }, 00868 { -17, 80 }, { -18, 73 }, { -4, 74 }, { -10, 83 }, 00869 { -9, 71 }, { -9, 67 }, { -1, 61 }, { -8, 66 }, 00870 { -14, 66 }, { 0, 59 }, { 2, 59 }, { -3, 81 }, 00871 { -3, 76 }, { -7, 72 }, { -6, 78 }, { -12, 72 }, 00872 { -14, 68 }, { -3, 70 }, { -6, 76 }, { -5, 66 }, 00873 { -5, 62 }, { 0, 57 }, { -4, 61 }, { -9, 60 }, 00874 { 1, 54 }, { 2, 58 }, { 17, -10 }, { 32, -13 }, 00875 { 42, -9 }, { 49, -5 }, { 53, 0 }, { 64, 3 }, 00876 { 68, 10 }, { 66, 27 }, { 47, 57 }, { 17, -10 }, 00877 { 32, -13 }, { 42, -9 }, { 49, -5 }, { 53, 0 }, 00878 { 64, 3 }, { 68, 10 }, { 66, 27 }, { 47, 57 }, 00879 { -5, 71 }, { 0, 24 }, { -1, 36 }, { -2, 42 }, 00880 { -2, 52 }, { -9, 57 }, { -6, 63 }, { -4, 65 }, 00881 { -4, 67 }, { -7, 82 }, { -5, 85 }, { -6, 81 }, 00882 { -10, 77 }, { -7, 81 }, { -17, 80 }, { -18, 73 }, 00883 { -4, 74 }, { -10, 83 }, { -9, 71 }, { -9, 67 }, 00884 { -1, 61 }, { -8, 66 }, { -14, 66 }, { 0, 59 }, 00885 { 2, 59 }, { -3, 81 }, { -3, 76 }, { -7, 72 }, 00886 { -6, 78 }, { -12, 72 }, { -14, 68 }, { -3, 70 }, 00887 { -6, 76 }, { -5, 66 }, { -5, 62 }, { 0, 57 }, 00888 { -4, 61 }, { -9, 60 }, { 1, 54 }, { 2, 58 }, 00889 { 17, -10 }, { 32, -13 }, { 42, -9 }, { 49, -5 }, 00890 { 53, 0 }, { 64, 3 }, { 68, 10 }, { 66, 27 }, 00891 { 47, 57 }, { 17, -10 }, { 32, -13 }, { 42, -9 }, 00892 { 49, -5 }, { 53, 0 }, { 64, 3 }, { 68, 10 }, 00893 { 66, 27 }, { 47, 57 }, { -5, 71 }, { 0, 24 }, 00894 { -1, 36 }, { -2, 42 }, { -2, 52 }, { -9, 57 }, 00895 { -6, 63 }, { -4, 65 }, { -4, 67 }, { -7, 82 }, 00896 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 }, 00897 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 }, 00898 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 }, 00899 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 }, 00900 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 }, 00901 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 }, 00902 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 }, 00903 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 }, 00904 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 }, 00905 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 }, 00906 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 }, 00907 { -21, 126 }, { -23, 124 }, { -20, 110 }, { -26, 126 }, 00908 { -25, 124 }, { -17, 105 }, { -27, 121 }, { -27, 117 }, 00909 { -17, 102 }, { -26, 117 }, { -27, 116 }, { -33, 122 }, 00910 { -10, 95 }, { -14, 100 }, { -8, 95 }, { -17, 111 }, 00911 { -28, 114 }, { -6, 89 }, { -2, 80 }, { -4, 82 }, 00912 { -9, 85 }, { -8, 81 }, { -1, 72 }, { 5, 64 }, 00913 { 1, 67 }, { 9, 56 }, { 0, 69 }, { 1, 69 }, 00914 { 7, 69 }, { -7, 69 }, { -6, 67 }, { -16, 77 }, 00915 { -2, 64 }, { 2, 61 }, { -6, 67 }, { -3, 64 }, 00916 { 2, 57 }, { -3, 65 }, { -3, 66 }, { 0, 62 }, 00917 { 9, 51 }, { -1, 66 }, { -2, 71 }, { -2, 75 }, 00918 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 }, 00919 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 }, 00920 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 }, 00921 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 }, 00922 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 }, 00923 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 }, 00924 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 }, 00925 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 }, 00926 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 }, 00927 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 }, 00928 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 }, 00929 { 19, -6 }, { 18, -6 }, { 14, 0 }, { 26, -12 }, 00930 { 31, -16 }, { 33, -25 }, { 33, -22 }, { 37, -28 }, 00931 { 39, -30 }, { 42, -30 }, { 47, -42 }, { 45, -36 }, 00932 { 49, -34 }, { 41, -17 }, { 32, 9 }, { 69, -71 }, 00933 { 63, -63 }, { 66, -64 }, { 77, -74 }, { 54, -39 }, 00934 { 52, -35 }, { 41, -10 }, { 36, 0 }, { 40, -1 }, 00935 { 30, 14 }, { 28, 26 }, { 23, 37 }, { 12, 55 }, 00936 { 11, 65 }, { 37, -33 }, { 39, -36 }, { 40, -37 }, 00937 { 38, -30 }, { 46, -33 }, { 42, -30 }, { 40, -24 }, 00938 { 49, -29 }, { 38, -12 }, { 40, -10 }, { 38, -3 }, 00939 { 46, -5 }, { 31, 20 }, { 29, 30 }, { 25, 44 }, 00940 { -23, 112 }, { -15, 71 }, { -7, 61 }, { 0, 53 }, 00941 { -5, 66 }, { -11, 77 }, { -9, 80 }, { -9, 84 }, 00942 { -10, 87 }, { -34, 127 }, { -21, 101 }, { -3, 39 }, 00943 { -5, 53 }, { -7, 61 }, { -11, 75 }, { -15, 77 }, 00944 { -17, 91 }, { -25, 107 }, { -25, 111 }, { -28, 122 }, 00945 { -11, 76 }, { -10, 44 }, { -10, 52 }, { -10, 57 }, 00946 { -9, 58 }, { -16, 72 }, { -7, 69 }, { -4, 69 }, 00947 { -5, 74 }, { -9, 86 }, { -23, 112 }, { -15, 71 }, 00948 { -7, 61 }, { 0, 53 }, { -5, 66 }, { -11, 77 }, 00949 { -9, 80 }, { -9, 84 }, { -10, 87 }, { -34, 127 }, 00950 { -21, 101 }, { -3, 39 }, { -5, 53 }, { -7, 61 }, 00951 { -11, 75 }, { -15, 77 }, { -17, 91 }, { -25, 107 }, 00952 { -25, 111 }, { -28, 122 }, { -11, 76 }, { -10, 44 }, 00953 { -10, 52 }, { -10, 57 }, { -9, 58 }, { -16, 72 }, 00954 { -7, 69 }, { -4, 69 }, { -5, 74 }, { -9, 86 }, 00955 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 }, 00956 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 }, 00957 { -2, 73 }, { -12, 104 }, { -9, 91 }, { -31, 127 } 00958 }, 00959 00960 /* i_cabac_init_idc == 2 */ 00961 { 00962 /* 0 - 10 */ 00963 { 20, -15 }, { 2, 54 }, { 3, 74 }, { 20, -15 }, 00964 { 2, 54 }, { 3, 74 }, { -28, 127 }, { -23, 104 }, 00965 { -6, 53 }, { -1, 54 }, { 7, 51 }, 00966 00967 /* 11 - 23 */ 00968 { 29, 16 }, { 25, 0 }, { 14, 0 }, { -10, 51 }, 00969 { -3, 62 }, { -27, 99 }, { 26, 16 }, { -4, 85 }, 00970 { -24, 102 }, { 5, 57 }, { 6, 57 }, { -17, 73 }, 00971 { 14, 57 }, 00972 00973 /* 24 - 39 */ 00974 { 20, 40 }, { 20, 10 }, { 29, 0 }, { 54, 0 }, 00975 { 37, 42 }, { 12, 97 }, { -32, 127 }, { -22, 117 }, 00976 { -2, 74 }, { -4, 85 }, { -24, 102 }, { 5, 57 }, 00977 { -6, 93 }, { -14, 88 }, { -6, 44 }, { 4, 55 }, 00978 00979 /* 40 - 53 */ 00980 { -11, 89 },{ -15, 103 },{ -21, 116 },{ 19, 57 }, 00981 { 20, 58 },{ 4, 84 },{ 6, 96 },{ 1, 63 }, 00982 { -5, 85 },{ -13, 106 },{ 5, 63 },{ 6, 75 }, 00983 { -3, 90 },{ -1, 101 }, 00984 00985 /* 54 - 59 */ 00986 { 3, 55 },{ -4, 79 },{ -2, 75 },{ -12, 97 }, 00987 { -7, 50 },{ 1, 60 }, 00988 00989 /* 60 - 69 */ 00990 { 0, 41 }, { 0, 63 }, { 0, 63 }, { 0, 63 }, 00991 { -9, 83 }, { 4, 86 }, { 0, 97 }, { -7, 72 }, 00992 { 13, 41 }, { 3, 62 }, 00993 00994 /* 70 - 104 */ 00995 { 7, 34 }, { -9, 88 }, { -20, 127 }, { -36, 127 }, 00996 { -17, 91 }, { -14, 95 }, { -25, 84 }, { -25, 86 }, 00997 { -12, 89 }, { -17, 91 }, { -31, 127 }, { -14, 76 }, 00998 { -18, 103 }, { -13, 90 }, { -37, 127 }, { 11, 80 }, 00999 { 5, 76 }, { 2, 84 }, { 5, 78 }, { -6, 55 }, 01000 { 4, 61 }, { -14, 83 }, { -37, 127 }, { -5, 79 }, 01001 { -11, 104 }, { -11, 91 }, { -30, 127 }, { 0, 65 }, 01002 { -2, 79 }, { 0, 72 }, { -4, 92 }, { -6, 56 }, 01003 { 3, 68 }, { -8, 71 }, { -13, 98 }, 01004 01005 /* 105 -> 165 */ 01006 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 }, 01007 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 }, 01008 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 }, 01009 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 }, 01010 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 }, 01011 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 }, 01012 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 }, 01013 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 }, 01014 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 }, 01015 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 }, 01016 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 }, 01017 { 3, 65 }, { -7, 69 }, { 8, 77 }, { -10, 66 }, 01018 { 3, 62 }, { -3, 68 }, { -20, 81 }, { 0, 30 }, 01019 { 1, 7 }, { -3, 23 }, { -21, 74 }, { 16, 66 }, 01020 { -23, 124 }, { 17, 37 }, { 44, -18 }, { 50, -34 }, 01021 { -22, 127 }, 01022 01023 /* 166 - 226 */ 01024 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 }, 01025 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 }, 01026 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 }, 01027 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 }, 01028 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 }, 01029 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 }, 01030 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 }, 01031 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 }, 01032 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 }, 01033 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 }, 01034 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 }, 01035 { 20, 34 }, { 19, 31 }, { 27, 44 }, { 19, 16 }, 01036 { 15, 36 }, { 15, 36 }, { 21, 28 }, { 25, 21 }, 01037 { 30, 20 }, { 31, 12 }, { 27, 16 }, { 24, 42 }, 01038 { 0, 93 }, { 14, 56 }, { 15, 57 }, { 26, 38 }, 01039 { -24, 127 }, 01040 01041 /* 227 - 275 */ 01042 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 }, 01043 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 }, 01044 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 }, 01045 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 }, 01046 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 }, 01047 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 }, 01048 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 }, 01049 { -12, 92 }, { -18, 108 }, { -4, 79 }, { -22, 69 }, 01050 { -16, 75 }, { -2, 58 }, { 1, 58 }, { -13, 78 }, 01051 { -9, 83 }, { -4, 81 }, { -13, 99 }, { -13, 81 }, 01052 { -6, 38 }, { -13, 62 }, { -6, 58 }, { -2, 59 }, 01053 { -16, 73 }, { -10, 76 }, { -13, 86 }, { -9, 83 }, 01054 { -10, 87 }, 01055 01056 /* 276 a bit special (not used, bypass is used instead) */ 01057 { 0, 0 }, 01058 01059 /* 277 - 337 */ 01060 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 }, 01061 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 }, 01062 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 }, 01063 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 }, 01064 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 }, 01065 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 }, 01066 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 }, 01067 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 }, 01068 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 }, 01069 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 }, 01070 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 }, 01071 { -2, 76 }, { -18, 86 }, { 12, 70 }, { 5, 64 }, 01072 { -12, 70 }, { 11, 55 }, { 5, 56 }, { 0, 69 }, 01073 { 2, 65 }, { -6, 74 }, { 5, 54 }, { 7, 54 }, 01074 { -6, 76 }, { -11, 82 }, { -2, 77 }, { -2, 77 }, 01075 { 25, 42 }, 01076 01077 /* 338 - 398 */ 01078 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 }, 01079 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 }, 01080 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 }, 01081 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 }, 01082 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 }, 01083 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 }, 01084 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 }, 01085 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 }, 01086 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 }, 01087 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 }, 01088 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 }, 01089 { 18, 31 }, { 19, 26 }, { 36, 24 }, { 24, 23 }, 01090 { 27, 16 }, { 24, 30 }, { 31, 29 }, { 22, 41 }, 01091 { 22, 42 }, { 16, 60 }, { 15, 52 }, { 14, 60 }, 01092 { 3, 78 }, { -16, 123 }, { 21, 53 }, { 22, 56 }, 01093 { 25, 61 }, 01094 01095 /* 399 - 435 */ 01096 { 21, 33 }, { 19, 50 }, { 17, 61 }, 01097 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 }, 01098 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 }, 01099 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 }, 01100 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 }, 01101 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 }, 01102 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 }, 01103 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 }, 01104 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 }, 01105 { -6, 68 }, { -10, 79 }, 01106 01107 /* 436 - 459 */ 01108 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 }, 01109 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 }, 01110 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 }, 01111 { -14, 59 }, { -9, 52 }, { -11, 68 }, { 9, -2 }, 01112 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 }, 01113 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 }, 01114 01115 /* 460 - 1024 */ 01116 { 11, 80 }, { 5, 76 }, { 2, 84 }, { 5, 78 }, 01117 { -6, 55 }, { 4, 61 }, { -14, 83 }, { -37, 127 }, 01118 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 }, 01119 { 11, 80 }, { 5, 76 }, { 2, 84 }, { 5, 78 }, 01120 { -6, 55 }, { 4, 61 }, { -14, 83 }, { -37, 127 }, 01121 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 }, 01122 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 }, 01123 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 }, 01124 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 }, 01125 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 }, 01126 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 }, 01127 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 }, 01128 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 }, 01129 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 }, 01130 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 }, 01131 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 }, 01132 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 }, 01133 { -4, 86 }, { -12, 88 }, { -5, 82 }, { -3, 72 }, 01134 { -4, 67 }, { -8, 72 }, { -16, 89 }, { -9, 69 }, 01135 { -1, 59 }, { 5, 66 }, { 4, 57 }, { -4, 71 }, 01136 { -2, 71 }, { 2, 58 }, { -1, 74 }, { -4, 44 }, 01137 { -1, 69 }, { 0, 62 }, { -7, 51 }, { -4, 47 }, 01138 { -6, 42 }, { -3, 41 }, { -6, 53 }, { 8, 76 }, 01139 { -9, 78 }, { -11, 83 }, { 9, 52 }, { 0, 67 }, 01140 { -5, 90 }, { 1, 67 }, { -15, 72 }, { -5, 75 }, 01141 { -8, 80 }, { -21, 83 }, { -21, 64 }, { -13, 31 }, 01142 { -25, 64 }, { -29, 94 }, { 9, 75 }, { 17, 63 }, 01143 { -8, 74 }, { -5, 35 }, { -2, 27 }, { 13, 91 }, 01144 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 }, 01145 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 }, 01146 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 }, 01147 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 }, 01148 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 }, 01149 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 }, 01150 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 }, 01151 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 }, 01152 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 }, 01153 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 }, 01154 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 }, 01155 { 4, 39 }, { 0, 42 }, { 7, 34 }, { 11, 29 }, 01156 { 8, 31 }, { 6, 37 }, { 7, 42 }, { 3, 40 }, 01157 { 8, 33 }, { 13, 43 }, { 13, 36 }, { 4, 47 }, 01158 { 3, 55 }, { 2, 58 }, { 6, 60 }, { 8, 44 }, 01159 { 11, 44 }, { 14, 42 }, { 7, 48 }, { 4, 56 }, 01160 { 4, 52 }, { 13, 37 }, { 9, 49 }, { 19, 58 }, 01161 { 10, 48 }, { 12, 45 }, { 0, 69 }, { 20, 33 }, 01162 { 8, 63 }, { 35, -18 }, { 33, -25 }, { 28, -3 }, 01163 { 24, 10 }, { 27, 0 }, { 34, -14 }, { 52, -44 }, 01164 { 39, -24 }, { 19, 17 }, { 31, 25 }, { 36, 29 }, 01165 { 24, 33 }, { 34, 15 }, { 30, 20 }, { 22, 73 }, 01166 { -3, 78 }, { -8, 74 }, { -9, 72 }, { -10, 72 }, 01167 { -18, 75 }, { -12, 71 }, { -11, 63 }, { -5, 70 }, 01168 { -17, 75 }, { -14, 72 }, { -16, 67 }, { -8, 53 }, 01169 { -14, 59 }, { -9, 52 }, { -11, 68 }, { -3, 78 }, 01170 { -8, 74 }, { -9, 72 }, { -10, 72 }, { -18, 75 }, 01171 { -12, 71 }, { -11, 63 }, { -5, 70 }, { -17, 75 }, 01172 { -14, 72 }, { -16, 67 }, { -8, 53 }, { -14, 59 }, 01173 { -9, 52 }, { -11, 68 }, { 9, -2 }, { 30, -10 }, 01174 { 31, -4 }, { 33, -1 }, { 33, 7 }, { 31, 12 }, 01175 { 37, 23 }, { 31, 38 }, { 20, 64 }, { 9, -2 }, 01176 { 30, -10 }, { 31, -4 }, { 33, -1 }, { 33, 7 }, 01177 { 31, 12 }, { 37, 23 }, { 31, 38 }, { 20, 64 }, 01178 { -9, 71 }, { -7, 37 }, { -8, 44 }, { -11, 49 }, 01179 { -10, 56 }, { -12, 59 }, { -8, 63 }, { -9, 67 }, 01180 { -6, 68 }, { -10, 79 }, { -3, 78 }, { -8, 74 }, 01181 { -9, 72 }, { -10, 72 }, { -18, 75 }, { -12, 71 }, 01182 { -11, 63 }, { -5, 70 }, { -17, 75 }, { -14, 72 }, 01183 { -16, 67 }, { -8, 53 }, { -14, 59 }, { -9, 52 }, 01184 { -11, 68 }, { -3, 78 }, { -8, 74 }, { -9, 72 }, 01185 { -10, 72 }, { -18, 75 }, { -12, 71 }, { -11, 63 }, 01186 { -5, 70 }, { -17, 75 }, { -14, 72 }, { -16, 67 }, 01187 { -8, 53 }, { -14, 59 }, { -9, 52 }, { -11, 68 }, 01188 { 9, -2 }, { 30, -10 }, { 31, -4 }, { 33, -1 }, 01189 { 33, 7 }, { 31, 12 }, { 37, 23 }, { 31, 38 }, 01190 { 20, 64 }, { 9, -2 }, { 30, -10 }, { 31, -4 }, 01191 { 33, -1 }, { 33, 7 }, { 31, 12 }, { 37, 23 }, 01192 { 31, 38 }, { 20, 64 }, { -9, 71 }, { -7, 37 }, 01193 { -8, 44 }, { -11, 49 }, { -10, 56 }, { -12, 59 }, 01194 { -8, 63 }, { -9, 67 }, { -6, 68 }, { -10, 79 }, 01195 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 }, 01196 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 }, 01197 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 }, 01198 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 }, 01199 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 }, 01200 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 }, 01201 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 }, 01202 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 }, 01203 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 }, 01204 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 }, 01205 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 }, 01206 { -22, 127 }, { -25, 127 }, { -25, 120 }, { -27, 127 }, 01207 { -19, 114 }, { -23, 117 }, { -25, 118 }, { -26, 117 }, 01208 { -24, 113 }, { -28, 118 }, { -31, 120 }, { -37, 124 }, 01209 { -10, 94 }, { -15, 102 }, { -10, 99 }, { -13, 106 }, 01210 { -50, 127 }, { -5, 92 }, { 17, 57 }, { -5, 86 }, 01211 { -13, 94 }, { -12, 91 }, { -2, 77 }, { 0, 71 }, 01212 { -1, 73 }, { 4, 64 }, { -7, 81 }, { 5, 64 }, 01213 { 15, 57 }, { 1, 67 }, { 0, 68 }, { -10, 67 }, 01214 { 1, 68 }, { 0, 77 }, { 2, 64 }, { 0, 68 }, 01215 { -5, 78 }, { 7, 55 }, { 5, 59 }, { 2, 65 }, 01216 { 14, 54 }, { 15, 44 }, { 5, 60 }, { 2, 70 }, 01217 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 }, 01218 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 }, 01219 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 }, 01220 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 }, 01221 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 }, 01222 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 }, 01223 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 }, 01224 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 }, 01225 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 }, 01226 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 }, 01227 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 }, 01228 { 17, -13 }, { 16, -9 }, { 17, -12 }, { 27, -21 }, 01229 { 37, -30 }, { 41, -40 }, { 42, -41 }, { 48, -47 }, 01230 { 39, -32 }, { 46, -40 }, { 52, -51 }, { 46, -41 }, 01231 { 52, -39 }, { 43, -19 }, { 32, 11 }, { 61, -55 }, 01232 { 56, -46 }, { 62, -50 }, { 81, -67 }, { 45, -20 }, 01233 { 35, -2 }, { 28, 15 }, { 34, 1 }, { 39, 1 }, 01234 { 30, 17 }, { 20, 38 }, { 18, 45 }, { 15, 54 }, 01235 { 0, 79 }, { 36, -16 }, { 37, -14 }, { 37, -17 }, 01236 { 32, 1 }, { 34, 15 }, { 29, 15 }, { 24, 25 }, 01237 { 34, 22 }, { 31, 16 }, { 35, 18 }, { 31, 28 }, 01238 { 33, 41 }, { 36, 28 }, { 27, 47 }, { 21, 62 }, 01239 { -24, 115 }, { -22, 82 }, { -9, 62 }, { 0, 53 }, 01240 { 0, 59 }, { -14, 85 }, { -13, 89 }, { -13, 94 }, 01241 { -11, 92 }, { -29, 127 }, { -21, 100 }, { -14, 57 }, 01242 { -12, 67 }, { -11, 71 }, { -10, 77 }, { -21, 85 }, 01243 { -16, 88 }, { -23, 104 }, { -15, 98 }, { -37, 127 }, 01244 { -10, 82 }, { -8, 48 }, { -8, 61 }, { -8, 66 }, 01245 { -7, 70 }, { -14, 75 }, { -10, 79 }, { -9, 83 }, 01246 { -12, 92 }, { -18, 108 }, { -24, 115 }, { -22, 82 }, 01247 { -9, 62 }, { 0, 53 }, { 0, 59 }, { -14, 85 }, 01248 { -13, 89 }, { -13, 94 }, { -11, 92 }, { -29, 127 }, 01249 { -21, 100 }, { -14, 57 }, { -12, 67 }, { -11, 71 }, 01250 { -10, 77 }, { -21, 85 }, { -16, 88 }, { -23, 104 }, 01251 { -15, 98 }, { -37, 127 }, { -10, 82 }, { -8, 48 }, 01252 { -8, 61 }, { -8, 66 }, { -7, 70 }, { -14, 75 }, 01253 { -10, 79 }, { -9, 83 }, { -12, 92 }, { -18, 108 }, 01254 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 }, 01255 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 }, 01256 { -5, 79 }, { -11, 104 }, { -11, 91 }, { -30, 127 } 01257 } 01258 }; 01259 01260 void ff_h264_init_cabac_states(H264Context *h) { 01261 MpegEncContext * const s = &h->s; 01262 int i; 01263 const int8_t (*tab)[2]; 01264 const int slice_qp = av_clip(s->qscale - 6*(h->sps.bit_depth_luma-8), 0, 51); 01265 01266 if( h->slice_type_nos == AV_PICTURE_TYPE_I ) tab = cabac_context_init_I; 01267 else tab = cabac_context_init_PB[h->cabac_init_idc]; 01268 01269 /* calculate pre-state */ 01270 for( i= 0; i < 1024; i++ ) { 01271 int pre = 2*(((tab[i][0] * slice_qp) >>4 ) + tab[i][1]) - 127; 01272 01273 pre^= pre>>31; 01274 if(pre > 124) 01275 pre= 124 + (pre&1); 01276 01277 h->cabac_state[i] = pre; 01278 } 01279 } 01280 01281 static int decode_cabac_field_decoding_flag(H264Context *h) { 01282 MpegEncContext * const s = &h->s; 01283 const long mbb_xy = h->mb_xy - 2L*s->mb_stride; 01284 01285 unsigned long ctx = 0; 01286 01287 ctx += h->mb_field_decoding_flag & !!s->mb_x; //for FMO:(s->current_picture.mb_type[mba_xy]>>7)&(h->slice_table[mba_xy] == h->slice_num); 01288 ctx += (s->current_picture.mb_type[mbb_xy]>>7)&(h->slice_table[mbb_xy] == h->slice_num); 01289 01290 return get_cabac_noinline( &h->cabac, &(h->cabac_state+70)[ctx] ); 01291 } 01292 01293 static int decode_cabac_intra_mb_type(H264Context *h, int ctx_base, int intra_slice) { 01294 uint8_t *state= &h->cabac_state[ctx_base]; 01295 int mb_type; 01296 01297 if(intra_slice){ 01298 int ctx=0; 01299 if( h->left_type[0] & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM)) 01300 ctx++; 01301 if( h->top_type & (MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM)) 01302 ctx++; 01303 if( get_cabac_noinline( &h->cabac, &state[ctx] ) == 0 ) 01304 return 0; /* I4x4 */ 01305 state += 2; 01306 }else{ 01307 if( get_cabac_noinline( &h->cabac, state ) == 0 ) 01308 return 0; /* I4x4 */ 01309 } 01310 01311 if( get_cabac_terminate( &h->cabac ) ) 01312 return 25; /* PCM */ 01313 01314 mb_type = 1; /* I16x16 */ 01315 mb_type += 12 * get_cabac_noinline( &h->cabac, &state[1] ); /* cbp_luma != 0 */ 01316 if( get_cabac_noinline( &h->cabac, &state[2] ) ) /* cbp_chroma */ 01317 mb_type += 4 + 4 * get_cabac_noinline( &h->cabac, &state[2+intra_slice] ); 01318 mb_type += 2 * get_cabac_noinline( &h->cabac, &state[3+intra_slice] ); 01319 mb_type += 1 * get_cabac_noinline( &h->cabac, &state[3+2*intra_slice] ); 01320 return mb_type; 01321 } 01322 01323 static int decode_cabac_mb_skip( H264Context *h, int mb_x, int mb_y ) { 01324 MpegEncContext * const s = &h->s; 01325 int mba_xy, mbb_xy; 01326 int ctx = 0; 01327 01328 if(FRAME_MBAFF){ //FIXME merge with the stuff in fill_caches? 01329 int mb_xy = mb_x + (mb_y&~1)*s->mb_stride; 01330 mba_xy = mb_xy - 1; 01331 if( (mb_y&1) 01332 && h->slice_table[mba_xy] == h->slice_num 01333 && MB_FIELD == !!IS_INTERLACED( s->current_picture.mb_type[mba_xy] ) ) 01334 mba_xy += s->mb_stride; 01335 if( MB_FIELD ){ 01336 mbb_xy = mb_xy - s->mb_stride; 01337 if( !(mb_y&1) 01338 && h->slice_table[mbb_xy] == h->slice_num 01339 && IS_INTERLACED( s->current_picture.mb_type[mbb_xy] ) ) 01340 mbb_xy -= s->mb_stride; 01341 }else 01342 mbb_xy = mb_x + (mb_y-1)*s->mb_stride; 01343 }else{ 01344 int mb_xy = h->mb_xy; 01345 mba_xy = mb_xy - 1; 01346 mbb_xy = mb_xy - (s->mb_stride << FIELD_PICTURE); 01347 } 01348 01349 if( h->slice_table[mba_xy] == h->slice_num && !IS_SKIP( s->current_picture.mb_type[mba_xy] )) 01350 ctx++; 01351 if( h->slice_table[mbb_xy] == h->slice_num && !IS_SKIP( s->current_picture.mb_type[mbb_xy] )) 01352 ctx++; 01353 01354 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) 01355 ctx += 13; 01356 return get_cabac_noinline( &h->cabac, &h->cabac_state[11+ctx] ); 01357 } 01358 01359 static int decode_cabac_mb_intra4x4_pred_mode( H264Context *h, int pred_mode ) { 01360 int mode = 0; 01361 01362 if( get_cabac( &h->cabac, &h->cabac_state[68] ) ) 01363 return pred_mode; 01364 01365 mode += 1 * get_cabac( &h->cabac, &h->cabac_state[69] ); 01366 mode += 2 * get_cabac( &h->cabac, &h->cabac_state[69] ); 01367 mode += 4 * get_cabac( &h->cabac, &h->cabac_state[69] ); 01368 01369 return mode + ( mode >= pred_mode ); 01370 } 01371 01372 static int decode_cabac_mb_chroma_pre_mode( H264Context *h) { 01373 const int mba_xy = h->left_mb_xy[0]; 01374 const int mbb_xy = h->top_mb_xy; 01375 01376 int ctx = 0; 01377 01378 /* No need to test for IS_INTRA4x4 and IS_INTRA16x16, as we set chroma_pred_mode_table to 0 */ 01379 if( h->left_type[0] && h->chroma_pred_mode_table[mba_xy] != 0 ) 01380 ctx++; 01381 01382 if( h->top_type && h->chroma_pred_mode_table[mbb_xy] != 0 ) 01383 ctx++; 01384 01385 if( get_cabac_noinline( &h->cabac, &h->cabac_state[64+ctx] ) == 0 ) 01386 return 0; 01387 01388 if( get_cabac_noinline( &h->cabac, &h->cabac_state[64+3] ) == 0 ) 01389 return 1; 01390 if( get_cabac_noinline( &h->cabac, &h->cabac_state[64+3] ) == 0 ) 01391 return 2; 01392 else 01393 return 3; 01394 } 01395 01396 static int decode_cabac_mb_cbp_luma( H264Context *h) { 01397 int cbp_b, cbp_a, ctx, cbp = 0; 01398 01399 cbp_a = h->left_cbp; 01400 cbp_b = h->top_cbp; 01401 01402 ctx = !(cbp_a & 0x02) + 2 * !(cbp_b & 0x04); 01403 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]); 01404 ctx = !(cbp & 0x01) + 2 * !(cbp_b & 0x08); 01405 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]) << 1; 01406 ctx = !(cbp_a & 0x08) + 2 * !(cbp & 0x01); 01407 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]) << 2; 01408 ctx = !(cbp & 0x04) + 2 * !(cbp & 0x02); 01409 cbp += get_cabac_noinline(&h->cabac, &h->cabac_state[73 + ctx]) << 3; 01410 return cbp; 01411 } 01412 static int decode_cabac_mb_cbp_chroma( H264Context *h) { 01413 int ctx; 01414 int cbp_a, cbp_b; 01415 01416 cbp_a = (h->left_cbp>>4)&0x03; 01417 cbp_b = (h-> top_cbp>>4)&0x03; 01418 01419 ctx = 0; 01420 if( cbp_a > 0 ) ctx++; 01421 if( cbp_b > 0 ) ctx += 2; 01422 if( get_cabac_noinline( &h->cabac, &h->cabac_state[77 + ctx] ) == 0 ) 01423 return 0; 01424 01425 ctx = 4; 01426 if( cbp_a == 2 ) ctx++; 01427 if( cbp_b == 2 ) ctx += 2; 01428 return 1 + get_cabac_noinline( &h->cabac, &h->cabac_state[77 + ctx] ); 01429 } 01430 01431 static int decode_cabac_p_mb_sub_type( H264Context *h ) { 01432 if( get_cabac( &h->cabac, &h->cabac_state[21] ) ) 01433 return 0; /* 8x8 */ 01434 if( !get_cabac( &h->cabac, &h->cabac_state[22] ) ) 01435 return 1; /* 8x4 */ 01436 if( get_cabac( &h->cabac, &h->cabac_state[23] ) ) 01437 return 2; /* 4x8 */ 01438 return 3; /* 4x4 */ 01439 } 01440 static int decode_cabac_b_mb_sub_type( H264Context *h ) { 01441 int type; 01442 if( !get_cabac( &h->cabac, &h->cabac_state[36] ) ) 01443 return 0; /* B_Direct_8x8 */ 01444 if( !get_cabac( &h->cabac, &h->cabac_state[37] ) ) 01445 return 1 + get_cabac( &h->cabac, &h->cabac_state[39] ); /* B_L0_8x8, B_L1_8x8 */ 01446 type = 3; 01447 if( get_cabac( &h->cabac, &h->cabac_state[38] ) ) { 01448 if( get_cabac( &h->cabac, &h->cabac_state[39] ) ) 01449 return 11 + get_cabac( &h->cabac, &h->cabac_state[39] ); /* B_L1_4x4, B_Bi_4x4 */ 01450 type += 4; 01451 } 01452 type += 2*get_cabac( &h->cabac, &h->cabac_state[39] ); 01453 type += get_cabac( &h->cabac, &h->cabac_state[39] ); 01454 return type; 01455 } 01456 01457 static int decode_cabac_mb_ref( H264Context *h, int list, int n ) { 01458 int refa = h->ref_cache[list][scan8[n] - 1]; 01459 int refb = h->ref_cache[list][scan8[n] - 8]; 01460 int ref = 0; 01461 int ctx = 0; 01462 01463 if( h->slice_type_nos == AV_PICTURE_TYPE_B) { 01464 if( refa > 0 && !(h->direct_cache[scan8[n] - 1]&(MB_TYPE_DIRECT2>>1)) ) 01465 ctx++; 01466 if( refb > 0 && !(h->direct_cache[scan8[n] - 8]&(MB_TYPE_DIRECT2>>1)) ) 01467 ctx += 2; 01468 } else { 01469 if( refa > 0 ) 01470 ctx++; 01471 if( refb > 0 ) 01472 ctx += 2; 01473 } 01474 01475 while( get_cabac( &h->cabac, &h->cabac_state[54+ctx] ) ) { 01476 ref++; 01477 ctx = (ctx>>2)+4; 01478 if(ref >= 32 /*h->ref_list[list]*/){ 01479 return -1; 01480 } 01481 } 01482 return ref; 01483 } 01484 01485 static int decode_cabac_mb_mvd( H264Context *h, int ctxbase, int amvd, int *mvda) { 01486 int mvd; 01487 01488 if(!get_cabac(&h->cabac, &h->cabac_state[ctxbase+((amvd-3)>>(INT_BIT-1))+((amvd-33)>>(INT_BIT-1))+2])){ 01489 // if(!get_cabac(&h->cabac, &h->cabac_state[ctxbase+(amvd>2)+(amvd>32)])){ 01490 *mvda= 0; 01491 return 0; 01492 } 01493 01494 mvd= 1; 01495 ctxbase+= 3; 01496 while( mvd < 9 && get_cabac( &h->cabac, &h->cabac_state[ctxbase] ) ) { 01497 if( mvd < 4 ) 01498 ctxbase++; 01499 mvd++; 01500 } 01501 01502 if( mvd >= 9 ) { 01503 int k = 3; 01504 while( get_cabac_bypass( &h->cabac ) ) { 01505 mvd += 1 << k; 01506 k++; 01507 if(k>24){ 01508 av_log(h->s.avctx, AV_LOG_ERROR, "overflow in decode_cabac_mb_mvd\n"); 01509 return INT_MIN; 01510 } 01511 } 01512 while( k-- ) { 01513 mvd += get_cabac_bypass( &h->cabac )<<k; 01514 } 01515 *mvda=mvd < 70 ? mvd : 70; 01516 }else 01517 *mvda=mvd; 01518 return get_cabac_bypass_sign( &h->cabac, -mvd ); 01519 } 01520 01521 #define DECODE_CABAC_MB_MVD( h, list, n )\ 01522 {\ 01523 int amvd0 = h->mvd_cache[list][scan8[n] - 1][0] +\ 01524 h->mvd_cache[list][scan8[n] - 8][0];\ 01525 int amvd1 = h->mvd_cache[list][scan8[n] - 1][1] +\ 01526 h->mvd_cache[list][scan8[n] - 8][1];\ 01527 \ 01528 mx += decode_cabac_mb_mvd( h, 40, amvd0, &mpx );\ 01529 my += decode_cabac_mb_mvd( h, 47, amvd1, &mpy );\ 01530 } 01531 01532 static av_always_inline int get_cabac_cbf_ctx( H264Context *h, int cat, int idx, int max_coeff, int is_dc ) { 01533 int nza, nzb; 01534 int ctx = 0; 01535 static const uint16_t base_ctx[14] = {85,89,93,97,101,1012,460,464,468,1016,472,476,480,1020}; 01536 01537 if( is_dc ) { 01538 if( cat == 3 ) { 01539 idx -= CHROMA_DC_BLOCK_INDEX; 01540 nza = (h->left_cbp>>(6+idx))&0x01; 01541 nzb = (h-> top_cbp>>(6+idx))&0x01; 01542 } else { 01543 idx -= LUMA_DC_BLOCK_INDEX; 01544 nza = h->left_cbp&(0x100<<idx); 01545 nzb = h-> top_cbp&(0x100<<idx); 01546 } 01547 } else { 01548 nza = h->non_zero_count_cache[scan8[idx] - 1]; 01549 nzb = h->non_zero_count_cache[scan8[idx] - 8]; 01550 } 01551 01552 if( nza > 0 ) 01553 ctx++; 01554 01555 if( nzb > 0 ) 01556 ctx += 2; 01557 01558 return base_ctx[cat] + ctx; 01559 } 01560 01561 DECLARE_ASM_CONST(1, uint8_t, last_coeff_flag_offset_8x8)[63] = { 01562 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01563 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01564 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 01565 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8 01566 }; 01567 01568 static av_always_inline void decode_cabac_residual_internal( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff, int is_dc ) { 01569 static const int significant_coeff_flag_offset[2][14] = { 01570 { 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 }, 01571 { 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 } 01572 }; 01573 static const int last_coeff_flag_offset[2][14] = { 01574 { 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 }, 01575 { 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 } 01576 }; 01577 static const int coeff_abs_level_m1_offset[14] = { 01578 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 01579 }; 01580 static const uint8_t significant_coeff_flag_offset_8x8[2][63] = { 01581 { 0, 1, 2, 3, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 5, 5, 01582 4, 4, 4, 4, 3, 3, 6, 7, 7, 7, 8, 9,10, 9, 8, 7, 01583 7, 6,11,12,13,11, 6, 7, 8, 9,14,10, 9, 8, 6,11, 01584 12,13,11, 6, 9,14,10, 9,11,12,13,11,14,10,12 }, 01585 { 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 4, 5, 01586 6, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,11,12,11, 01587 9, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,13,13, 9, 01588 9,10,10, 8,13,13, 9, 9,10,10,14,14,14,14,14 } 01589 }; 01590 /* node ctx: 0..3: abslevel1 (with abslevelgt1 == 0). 01591 * 4..7: abslevelgt1 + 3 (and abslevel1 doesn't matter). 01592 * map node ctx => cabac ctx for level=1 */ 01593 static const uint8_t coeff_abs_level1_ctx[8] = { 1, 2, 3, 4, 0, 0, 0, 0 }; 01594 /* map node ctx => cabac ctx for level>1 */ 01595 static const uint8_t coeff_abs_levelgt1_ctx[8] = { 5, 5, 5, 5, 6, 7, 8, 9 }; 01596 static const uint8_t coeff_abs_level_transition[2][8] = { 01597 /* update node ctx after decoding a level=1 */ 01598 { 1, 2, 3, 3, 4, 5, 6, 7 }, 01599 /* update node ctx after decoding a level>1 */ 01600 { 4, 4, 4, 4, 5, 6, 7, 7 } 01601 }; 01602 01603 int index[64]; 01604 01605 int av_unused last; 01606 int coeff_count = 0; 01607 int node_ctx = 0; 01608 01609 uint8_t *significant_coeff_ctx_base; 01610 uint8_t *last_coeff_ctx_base; 01611 uint8_t *abs_level_m1_ctx_base; 01612 01613 #if !ARCH_X86 01614 #define CABAC_ON_STACK 01615 #endif 01616 #ifdef CABAC_ON_STACK 01617 #define CC &cc 01618 CABACContext cc; 01619 cc.range = h->cabac.range; 01620 cc.low = h->cabac.low; 01621 cc.bytestream= h->cabac.bytestream; 01622 #else 01623 #define CC &h->cabac 01624 #endif 01625 01626 significant_coeff_ctx_base = h->cabac_state 01627 + significant_coeff_flag_offset[MB_FIELD][cat]; 01628 last_coeff_ctx_base = h->cabac_state 01629 + last_coeff_flag_offset[MB_FIELD][cat]; 01630 abs_level_m1_ctx_base = h->cabac_state 01631 + coeff_abs_level_m1_offset[cat]; 01632 01633 if( !is_dc && max_coeff == 64 ) { 01634 #define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \ 01635 for(last= 0; last < coefs; last++) { \ 01636 uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \ 01637 if( get_cabac( CC, sig_ctx )) { \ 01638 uint8_t *last_ctx = last_coeff_ctx_base + last_off; \ 01639 index[coeff_count++] = last; \ 01640 if( get_cabac( CC, last_ctx ) ) { \ 01641 last= max_coeff; \ 01642 break; \ 01643 } \ 01644 } \ 01645 }\ 01646 if( last == max_coeff -1 ) {\ 01647 index[coeff_count++] = last;\ 01648 } 01649 const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD]; 01650 #if ARCH_X86 && HAVE_7REGS && HAVE_EBX_AVAILABLE && !defined(BROKEN_RELOCATIONS) 01651 coeff_count= decode_significance_8x8_x86(CC, significant_coeff_ctx_base, index, 01652 last_coeff_ctx_base-significant_coeff_ctx_base, sig_off); 01653 } else { 01654 coeff_count= decode_significance_x86(CC, max_coeff, significant_coeff_ctx_base, index, 01655 last_coeff_ctx_base-significant_coeff_ctx_base); 01656 #else 01657 DECODE_SIGNIFICANCE( 63, sig_off[last], last_coeff_flag_offset_8x8[last] ); 01658 } else { 01659 DECODE_SIGNIFICANCE( max_coeff - 1, last, last ); 01660 #endif 01661 } 01662 assert(coeff_count > 0); 01663 01664 if( is_dc ) { 01665 if( cat == 3 ) 01666 h->cbp_table[h->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX); 01667 else 01668 h->cbp_table[h->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX); 01669 h->non_zero_count_cache[scan8[n]] = coeff_count; 01670 } else { 01671 if( max_coeff == 64 ) 01672 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1); 01673 else { 01674 assert( cat == 1 || cat == 2 || cat == 4 || cat == 7 || cat == 8 || cat == 11 || cat == 12 ); 01675 h->non_zero_count_cache[scan8[n]] = coeff_count; 01676 } 01677 } 01678 01679 #define STORE_BLOCK(type) \ 01680 do { \ 01681 uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; \ 01682 \ 01683 int j= scantable[index[--coeff_count]]; \ 01684 \ 01685 if( get_cabac( CC, ctx ) == 0 ) { \ 01686 node_ctx = coeff_abs_level_transition[0][node_ctx]; \ 01687 if( is_dc ) { \ 01688 ((type*)block)[j] = get_cabac_bypass_sign( CC, -1); \ 01689 }else{ \ 01690 ((type*)block)[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; \ 01691 } \ 01692 } else { \ 01693 int coeff_abs = 2; \ 01694 ctx = coeff_abs_levelgt1_ctx[node_ctx] + abs_level_m1_ctx_base; \ 01695 node_ctx = coeff_abs_level_transition[1][node_ctx]; \ 01696 \ 01697 while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { \ 01698 coeff_abs++; \ 01699 } \ 01700 \ 01701 if( coeff_abs >= 15 ) { \ 01702 int j = 0; \ 01703 while( get_cabac_bypass( CC ) ) { \ 01704 j++; \ 01705 } \ 01706 \ 01707 coeff_abs=1; \ 01708 while( j-- ) { \ 01709 coeff_abs += coeff_abs + get_cabac_bypass( CC ); \ 01710 } \ 01711 coeff_abs+= 14; \ 01712 } \ 01713 \ 01714 if( is_dc ) { \ 01715 ((type*)block)[j] = get_cabac_bypass_sign( CC, -coeff_abs ); \ 01716 }else{ \ 01717 ((type*)block)[j] = ((int)(get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32)) >> 6; \ 01718 } \ 01719 } \ 01720 } while ( coeff_count ); 01721 01722 if (h->pixel_shift) { 01723 STORE_BLOCK(int32_t) 01724 } else { 01725 STORE_BLOCK(int16_t) 01726 } 01727 #ifdef CABAC_ON_STACK 01728 h->cabac.range = cc.range ; 01729 h->cabac.low = cc.low ; 01730 h->cabac.bytestream= cc.bytestream; 01731 #endif 01732 01733 } 01734 01735 static void decode_cabac_residual_dc_internal( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, int max_coeff ) { 01736 decode_cabac_residual_internal(h, block, cat, n, scantable, NULL, max_coeff, 1); 01737 } 01738 01739 static void decode_cabac_residual_nondc_internal( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff ) { 01740 decode_cabac_residual_internal(h, block, cat, n, scantable, qmul, max_coeff, 0); 01741 } 01742 01743 /* cat: 0-> DC 16x16 n = 0 01744 * 1-> AC 16x16 n = luma4x4idx 01745 * 2-> Luma4x4 n = luma4x4idx 01746 * 3-> DC Chroma n = iCbCr 01747 * 4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx 01748 * 5-> Luma8x8 n = 4 * luma8x8idx */ 01749 01750 /* Partially inline the CABAC residual decode: inline the coded block flag. 01751 * This has very little impact on binary size and improves performance 01752 * because it allows improved constant propagation into get_cabac_cbf_ctx, 01753 * as well as because most blocks have zero CBFs. */ 01754 01755 static av_always_inline void decode_cabac_residual_dc( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, int max_coeff ) { 01756 /* read coded block flag */ 01757 if( get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 1 ) ] ) == 0 ) { 01758 h->non_zero_count_cache[scan8[n]] = 0; 01759 return; 01760 } 01761 decode_cabac_residual_dc_internal( h, block, cat, n, scantable, max_coeff ); 01762 } 01763 01764 static av_always_inline void decode_cabac_residual_nondc( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff ) { 01765 /* read coded block flag */ 01766 if( (cat != 5 || CHROMA444) && get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 0 ) ] ) == 0 ) { 01767 if( max_coeff == 64 ) { 01768 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1); 01769 } else { 01770 h->non_zero_count_cache[scan8[n]] = 0; 01771 } 01772 return; 01773 } 01774 decode_cabac_residual_nondc_internal( h, block, cat, n, scantable, qmul, max_coeff ); 01775 } 01776 01777 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 ) 01778 { 01779 static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}}; 01780 const uint32_t *qmul; 01781 int i8x8, i4x4; 01782 MpegEncContext * const s = &h->s; 01783 int qscale = p == 0 ? s->qscale : h->chroma_qp[p-1]; 01784 if( IS_INTRA16x16( mb_type ) ) { 01785 //av_log( s->avctx, AV_LOG_ERROR, "INTRA16x16 DC\n" ); 01786 AV_ZERO128(h->mb_luma_dc[p]+0); 01787 AV_ZERO128(h->mb_luma_dc[p]+8); 01788 AV_ZERO128(h->mb_luma_dc[p]+16); 01789 AV_ZERO128(h->mb_luma_dc[p]+24); 01790 decode_cabac_residual_dc(h, h->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16); 01791 01792 if( cbp&15 ) { 01793 qmul = h->dequant4_coeff[p][qscale]; 01794 for( i4x4 = 0; i4x4 < 16; i4x4++ ) { 01795 const int index = 16*p + i4x4; 01796 //av_log( s->avctx, AV_LOG_ERROR, "INTRA16x16 AC:%d\n", index ); 01797 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15); 01798 } 01799 } else { 01800 fill_rectangle(&h->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1); 01801 } 01802 } else { 01803 int cqm = (IS_INTRA( mb_type ) ? 0:3) + p; 01804 for( i8x8 = 0; i8x8 < 4; i8x8++ ) { 01805 if( cbp & (1<<i8x8) ) { 01806 if( IS_8x8DCT(mb_type) ) { 01807 const int index = 16*p + 4*i8x8; 01808 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[3][p], index, 01809 scan8x8, h->dequant8_coeff[cqm][qscale], 64); 01810 } else { 01811 qmul = h->dequant4_coeff[cqm][qscale]; 01812 for( i4x4 = 0; i4x4 < 4; i4x4++ ) { 01813 const int index = 16*p + 4*i8x8 + i4x4; 01814 //av_log( s->avctx, AV_LOG_ERROR, "Luma4x4: %d\n", index ); 01815 //START_TIMER 01816 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16); 01817 //STOP_TIMER("decode_residual") 01818 } 01819 } 01820 } else { 01821 uint8_t * const nnz= &h->non_zero_count_cache[ scan8[4*i8x8+16*p] ]; 01822 nnz[0] = nnz[1] = nnz[8] = nnz[9] = 0; 01823 } 01824 } 01825 } 01826 } 01827 01832 int ff_h264_decode_mb_cabac(H264Context *h) { 01833 MpegEncContext * const s = &h->s; 01834 int mb_xy; 01835 int mb_type, partition_count, cbp = 0; 01836 int dct8x8_allowed= h->pps.transform_8x8_mode; 01837 int decode_chroma = h->sps.chroma_format_idc == 1 || h->sps.chroma_format_idc == 2; 01838 const int pixel_shift = h->pixel_shift; 01839 01840 mb_xy = h->mb_xy = s->mb_x + s->mb_y*s->mb_stride; 01841 01842 tprintf(s->avctx, "pic:%d mb:%d/%d\n", h->frame_num, s->mb_x, s->mb_y); 01843 if( h->slice_type_nos != AV_PICTURE_TYPE_I ) { 01844 int skip; 01845 /* a skipped mb needs the aff flag from the following mb */ 01846 if( FRAME_MBAFF && (s->mb_y&1)==1 && h->prev_mb_skipped ) 01847 skip = h->next_mb_skipped; 01848 else 01849 skip = decode_cabac_mb_skip( h, s->mb_x, s->mb_y ); 01850 /* read skip flags */ 01851 if( skip ) { 01852 if( FRAME_MBAFF && (s->mb_y&1)==0 ){ 01853 s->current_picture.mb_type[mb_xy] = MB_TYPE_SKIP; 01854 h->next_mb_skipped = decode_cabac_mb_skip( h, s->mb_x, s->mb_y+1 ); 01855 if(!h->next_mb_skipped) 01856 h->mb_mbaff = h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h); 01857 } 01858 01859 decode_mb_skip(h); 01860 01861 h->cbp_table[mb_xy] = 0; 01862 h->chroma_pred_mode_table[mb_xy] = 0; 01863 h->last_qscale_diff = 0; 01864 01865 return 0; 01866 01867 } 01868 } 01869 if(FRAME_MBAFF){ 01870 if( (s->mb_y&1) == 0 ) 01871 h->mb_mbaff = 01872 h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h); 01873 } 01874 01875 h->prev_mb_skipped = 0; 01876 01877 fill_decode_neighbors(h, -(MB_FIELD)); 01878 01879 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) { 01880 int ctx = 0; 01881 assert(h->slice_type_nos == AV_PICTURE_TYPE_B); 01882 01883 if( !IS_DIRECT( h->left_type[0]-1 ) ) 01884 ctx++; 01885 if( !IS_DIRECT( h->top_type-1 ) ) 01886 ctx++; 01887 01888 if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+ctx] ) ){ 01889 mb_type= 0; /* B_Direct_16x16 */ 01890 }else if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+3] ) ) { 01891 mb_type= 1 + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ); /* B_L[01]_16x16 */ 01892 }else{ 01893 int bits; 01894 bits = get_cabac_noinline( &h->cabac, &h->cabac_state[27+4] ) << 3; 01895 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 2; 01896 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 1; 01897 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ); 01898 if( bits < 8 ){ 01899 mb_type= bits + 3; /* B_Bi_16x16 through B_L1_L0_16x8 */ 01900 }else if( bits == 13 ){ 01901 mb_type= decode_cabac_intra_mb_type(h, 32, 0); 01902 goto decode_intra_mb; 01903 }else if( bits == 14 ){ 01904 mb_type= 11; /* B_L1_L0_8x16 */ 01905 }else if( bits == 15 ){ 01906 mb_type= 22; /* B_8x8 */ 01907 }else{ 01908 bits= ( bits<<1 ) + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ); 01909 mb_type= bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */ 01910 } 01911 } 01912 partition_count= b_mb_type_info[mb_type].partition_count; 01913 mb_type= b_mb_type_info[mb_type].type; 01914 } else if( h->slice_type_nos == AV_PICTURE_TYPE_P ) { 01915 if( get_cabac_noinline( &h->cabac, &h->cabac_state[14] ) == 0 ) { 01916 /* P-type */ 01917 if( get_cabac_noinline( &h->cabac, &h->cabac_state[15] ) == 0 ) { 01918 /* P_L0_D16x16, P_8x8 */ 01919 mb_type= 3 * get_cabac_noinline( &h->cabac, &h->cabac_state[16] ); 01920 } else { 01921 /* P_L0_D8x16, P_L0_D16x8 */ 01922 mb_type= 2 - get_cabac_noinline( &h->cabac, &h->cabac_state[17] ); 01923 } 01924 partition_count= p_mb_type_info[mb_type].partition_count; 01925 mb_type= p_mb_type_info[mb_type].type; 01926 } else { 01927 mb_type= decode_cabac_intra_mb_type(h, 17, 0); 01928 goto decode_intra_mb; 01929 } 01930 } else { 01931 mb_type= decode_cabac_intra_mb_type(h, 3, 1); 01932 if(h->slice_type == AV_PICTURE_TYPE_SI && mb_type) 01933 mb_type--; 01934 assert(h->slice_type_nos == AV_PICTURE_TYPE_I); 01935 decode_intra_mb: 01936 partition_count = 0; 01937 cbp= i_mb_type_info[mb_type].cbp; 01938 h->intra16x16_pred_mode= i_mb_type_info[mb_type].pred_mode; 01939 mb_type= i_mb_type_info[mb_type].type; 01940 } 01941 if(MB_FIELD) 01942 mb_type |= MB_TYPE_INTERLACED; 01943 01944 h->slice_table[ mb_xy ]= h->slice_num; 01945 01946 if(IS_INTRA_PCM(mb_type)) { 01947 static const uint16_t mb_sizes[4] = {256,384,512,768}; 01948 const int mb_size = mb_sizes[h->sps.chroma_format_idc]*h->sps.bit_depth_luma >> 3; 01949 const uint8_t *ptr; 01950 01951 // We assume these blocks are very rare so we do not optimize it. 01952 // FIXME The two following lines get the bitstream position in the cabac 01953 // decode, I think it should be done by a function in cabac.h (or cabac.c). 01954 ptr= h->cabac.bytestream; 01955 if(h->cabac.low&0x1) ptr--; 01956 if(CABAC_BITS==16){ 01957 if(h->cabac.low&0x1FF) ptr--; 01958 } 01959 01960 // The pixels are stored in the same order as levels in h->mb array. 01961 memcpy(h->mb, ptr, mb_size); ptr+=mb_size; 01962 01963 ff_init_cabac_decoder(&h->cabac, ptr, h->cabac.bytestream_end - ptr); 01964 01965 // All blocks are present 01966 h->cbp_table[mb_xy] = 0xf7ef; 01967 h->chroma_pred_mode_table[mb_xy] = 0; 01968 // In deblocking, the quantizer is 0 01969 s->current_picture.qscale_table[mb_xy]= 0; 01970 // All coeffs are present 01971 memset(h->non_zero_count[mb_xy], 16, 48); 01972 s->current_picture.mb_type[mb_xy]= mb_type; 01973 h->last_qscale_diff = 0; 01974 return 0; 01975 } 01976 01977 if(MB_MBAFF){ 01978 h->ref_count[0] <<= 1; 01979 h->ref_count[1] <<= 1; 01980 } 01981 01982 fill_decode_caches(h, mb_type); 01983 01984 if( IS_INTRA( mb_type ) ) { 01985 int i, pred_mode; 01986 if( IS_INTRA4x4( mb_type ) ) { 01987 if( dct8x8_allowed && get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] ) ) { 01988 mb_type |= MB_TYPE_8x8DCT; 01989 for( i = 0; i < 16; i+=4 ) { 01990 int pred = pred_intra_mode( h, i ); 01991 int mode = decode_cabac_mb_intra4x4_pred_mode( h, pred ); 01992 fill_rectangle( &h->intra4x4_pred_mode_cache[ scan8[i] ], 2, 2, 8, mode, 1 ); 01993 } 01994 } else { 01995 for( i = 0; i < 16; i++ ) { 01996 int pred = pred_intra_mode( h, i ); 01997 h->intra4x4_pred_mode_cache[ scan8[i] ] = decode_cabac_mb_intra4x4_pred_mode( h, pred ); 01998 01999 //av_log( s->avctx, AV_LOG_ERROR, "i4x4 pred=%d mode=%d\n", pred, h->intra4x4_pred_mode_cache[ scan8[i] ] ); 02000 } 02001 } 02002 ff_h264_write_back_intra_pred_mode(h); 02003 if( ff_h264_check_intra4x4_pred_mode(h) < 0 ) return -1; 02004 } else { 02005 h->intra16x16_pred_mode= ff_h264_check_intra_pred_mode( h, h->intra16x16_pred_mode ); 02006 if( h->intra16x16_pred_mode < 0 ) return -1; 02007 } 02008 if(decode_chroma){ 02009 h->chroma_pred_mode_table[mb_xy] = 02010 pred_mode = decode_cabac_mb_chroma_pre_mode( h ); 02011 02012 pred_mode= ff_h264_check_intra_pred_mode( h, pred_mode ); 02013 if( pred_mode < 0 ) return -1; 02014 h->chroma_pred_mode= pred_mode; 02015 } else { 02016 h->chroma_pred_mode= DC_128_PRED8x8; 02017 } 02018 } else if( partition_count == 4 ) { 02019 int i, j, sub_partition_count[4], list, ref[2][4]; 02020 02021 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) { 02022 for( i = 0; i < 4; i++ ) { 02023 h->sub_mb_type[i] = decode_cabac_b_mb_sub_type( h ); 02024 sub_partition_count[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count; 02025 h->sub_mb_type[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].type; 02026 } 02027 if( IS_DIRECT(h->sub_mb_type[0] | h->sub_mb_type[1] | 02028 h->sub_mb_type[2] | h->sub_mb_type[3]) ) { 02029 ff_h264_pred_direct_motion(h, &mb_type); 02030 h->ref_cache[0][scan8[4]] = 02031 h->ref_cache[1][scan8[4]] = 02032 h->ref_cache[0][scan8[12]] = 02033 h->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE; 02034 for( i = 0; i < 4; i++ ) 02035 fill_rectangle( &h->direct_cache[scan8[4*i]], 2, 2, 8, (h->sub_mb_type[i]>>1)&0xFF, 1 ); 02036 } 02037 } else { 02038 for( i = 0; i < 4; i++ ) { 02039 h->sub_mb_type[i] = decode_cabac_p_mb_sub_type( h ); 02040 sub_partition_count[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count; 02041 h->sub_mb_type[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].type; 02042 } 02043 } 02044 02045 for( list = 0; list < h->list_count; list++ ) { 02046 for( i = 0; i < 4; i++ ) { 02047 if(IS_DIRECT(h->sub_mb_type[i])) continue; 02048 if(IS_DIR(h->sub_mb_type[i], 0, list)){ 02049 if( h->ref_count[list] > 1 ){ 02050 ref[list][i] = decode_cabac_mb_ref( h, list, 4*i ); 02051 if(ref[list][i] >= (unsigned)h->ref_count[list]){ 02052 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], h->ref_count[list]); 02053 return -1; 02054 } 02055 }else 02056 ref[list][i] = 0; 02057 } else { 02058 ref[list][i] = -1; 02059 } 02060 h->ref_cache[list][ scan8[4*i]+1 ]= 02061 h->ref_cache[list][ scan8[4*i]+8 ]=h->ref_cache[list][ scan8[4*i]+9 ]= ref[list][i]; 02062 } 02063 } 02064 02065 if(dct8x8_allowed) 02066 dct8x8_allowed = get_dct8x8_allowed(h); 02067 02068 for(list=0; list<h->list_count; list++){ 02069 for(i=0; i<4; i++){ 02070 h->ref_cache[list][ scan8[4*i] ]=h->ref_cache[list][ scan8[4*i]+1 ]; 02071 if(IS_DIRECT(h->sub_mb_type[i])){ 02072 fill_rectangle(h->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2); 02073 continue; 02074 } 02075 02076 if(IS_DIR(h->sub_mb_type[i], 0, list) && !IS_DIRECT(h->sub_mb_type[i])){ 02077 const int sub_mb_type= h->sub_mb_type[i]; 02078 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1; 02079 for(j=0; j<sub_partition_count[i]; j++){ 02080 int mpx, mpy; 02081 int mx, my; 02082 const int index= 4*i + block_width*j; 02083 int16_t (* mv_cache)[2]= &h->mv_cache[list][ scan8[index] ]; 02084 uint8_t (* mvd_cache)[2]= &h->mvd_cache[list][ scan8[index] ]; 02085 pred_motion(h, index, block_width, list, h->ref_cache[list][ scan8[index] ], &mx, &my); 02086 DECODE_CABAC_MB_MVD( h, list, index) 02087 tprintf(s->avctx, "final mv:%d %d\n", mx, my); 02088 02089 if(IS_SUB_8X8(sub_mb_type)){ 02090 mv_cache[ 1 ][0]= 02091 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx; 02092 mv_cache[ 1 ][1]= 02093 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my; 02094 02095 mvd_cache[ 1 ][0]= 02096 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx; 02097 mvd_cache[ 1 ][1]= 02098 mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy; 02099 }else if(IS_SUB_8X4(sub_mb_type)){ 02100 mv_cache[ 1 ][0]= mx; 02101 mv_cache[ 1 ][1]= my; 02102 02103 mvd_cache[ 1 ][0]= mpx; 02104 mvd_cache[ 1 ][1]= mpy; 02105 }else if(IS_SUB_4X8(sub_mb_type)){ 02106 mv_cache[ 8 ][0]= mx; 02107 mv_cache[ 8 ][1]= my; 02108 02109 mvd_cache[ 8 ][0]= mpx; 02110 mvd_cache[ 8 ][1]= mpy; 02111 } 02112 mv_cache[ 0 ][0]= mx; 02113 mv_cache[ 0 ][1]= my; 02114 02115 mvd_cache[ 0 ][0]= mpx; 02116 mvd_cache[ 0 ][1]= mpy; 02117 } 02118 }else{ 02119 fill_rectangle(h->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4); 02120 fill_rectangle(h->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2); 02121 } 02122 } 02123 } 02124 } else if( IS_DIRECT(mb_type) ) { 02125 ff_h264_pred_direct_motion(h, &mb_type); 02126 fill_rectangle(h->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2); 02127 fill_rectangle(h->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2); 02128 dct8x8_allowed &= h->sps.direct_8x8_inference_flag; 02129 } else { 02130 int list, i; 02131 if(IS_16X16(mb_type)){ 02132 for(list=0; list<h->list_count; list++){ 02133 if(IS_DIR(mb_type, 0, list)){ 02134 int ref; 02135 if(h->ref_count[list] > 1){ 02136 ref= decode_cabac_mb_ref(h, list, 0); 02137 if(ref >= (unsigned)h->ref_count[list]){ 02138 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]); 02139 return -1; 02140 } 02141 }else 02142 ref=0; 02143 fill_rectangle(&h->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1); 02144 } 02145 } 02146 for(list=0; list<h->list_count; list++){ 02147 if(IS_DIR(mb_type, 0, list)){ 02148 int mx,my,mpx,mpy; 02149 pred_motion(h, 0, 4, list, h->ref_cache[list][ scan8[0] ], &mx, &my); 02150 DECODE_CABAC_MB_MVD( h, list, 0) 02151 tprintf(s->avctx, "final mv:%d %d\n", mx, my); 02152 02153 fill_rectangle(h->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2); 02154 fill_rectangle(h->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4); 02155 } 02156 } 02157 } 02158 else if(IS_16X8(mb_type)){ 02159 for(list=0; list<h->list_count; list++){ 02160 for(i=0; i<2; i++){ 02161 if(IS_DIR(mb_type, i, list)){ 02162 int ref; 02163 if(h->ref_count[list] > 1){ 02164 ref= decode_cabac_mb_ref( h, list, 8*i ); 02165 if(ref >= (unsigned)h->ref_count[list]){ 02166 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]); 02167 return -1; 02168 } 02169 }else 02170 ref=0; 02171 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1); 02172 }else 02173 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1); 02174 } 02175 } 02176 for(list=0; list<h->list_count; list++){ 02177 for(i=0; i<2; i++){ 02178 if(IS_DIR(mb_type, i, list)){ 02179 int mx,my,mpx,mpy; 02180 pred_16x8_motion(h, 8*i, list, h->ref_cache[list][scan8[0] + 16*i], &mx, &my); 02181 DECODE_CABAC_MB_MVD( h, list, 8*i) 02182 tprintf(s->avctx, "final mv:%d %d\n", mx, my); 02183 02184 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2); 02185 fill_rectangle(h->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4); 02186 }else{ 02187 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2); 02188 fill_rectangle(h-> mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4); 02189 } 02190 } 02191 } 02192 }else{ 02193 assert(IS_8X16(mb_type)); 02194 for(list=0; list<h->list_count; list++){ 02195 for(i=0; i<2; i++){ 02196 if(IS_DIR(mb_type, i, list)){ //FIXME optimize 02197 int ref; 02198 if(h->ref_count[list] > 1){ 02199 ref= decode_cabac_mb_ref( h, list, 4*i ); 02200 if(ref >= (unsigned)h->ref_count[list]){ 02201 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]); 02202 return -1; 02203 } 02204 }else 02205 ref=0; 02206 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1); 02207 }else 02208 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1); 02209 } 02210 } 02211 for(list=0; list<h->list_count; list++){ 02212 for(i=0; i<2; i++){ 02213 if(IS_DIR(mb_type, i, list)){ 02214 int mx,my,mpx,mpy; 02215 pred_8x16_motion(h, i*4, list, h->ref_cache[list][ scan8[0] + 2*i ], &mx, &my); 02216 DECODE_CABAC_MB_MVD( h, list, 4*i) 02217 02218 tprintf(s->avctx, "final mv:%d %d\n", mx, my); 02219 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2); 02220 fill_rectangle(h->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4); 02221 }else{ 02222 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2); 02223 fill_rectangle(h-> mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4); 02224 } 02225 } 02226 } 02227 } 02228 } 02229 02230 if( IS_INTER( mb_type ) ) { 02231 h->chroma_pred_mode_table[mb_xy] = 0; 02232 write_back_motion( h, mb_type ); 02233 } 02234 02235 if( !IS_INTRA16x16( mb_type ) ) { 02236 cbp = decode_cabac_mb_cbp_luma( h ); 02237 if(decode_chroma) 02238 cbp |= decode_cabac_mb_cbp_chroma( h ) << 4; 02239 } 02240 02241 h->cbp_table[mb_xy] = h->cbp = cbp; 02242 02243 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) { 02244 mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] ); 02245 } 02246 02247 /* It would be better to do this in fill_decode_caches, but we don't know 02248 * the transform mode of the current macroblock there. */ 02249 if (CHROMA444 && IS_8x8DCT(mb_type)){ 02250 int i; 02251 for (i = 0; i < 2; i++){ 02252 if (h->left_type[i] && !IS_8x8DCT(h->left_type[i])){ 02253 h->non_zero_count_cache[3+8* 1 + 2*8*i]= 02254 h->non_zero_count_cache[3+8* 2 + 2*8*i]= 02255 h->non_zero_count_cache[3+8* 6 + 2*8*i]= 02256 h->non_zero_count_cache[3+8* 7 + 2*8*i]= 02257 h->non_zero_count_cache[3+8*11 + 2*8*i]= 02258 h->non_zero_count_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0; 02259 } 02260 } 02261 if (h->top_type && !IS_8x8DCT(h->top_type)){ 02262 uint32_t top_empty = CABAC && !IS_INTRA(mb_type) ? 0 : 0x40404040; 02263 AV_WN32A(&h->non_zero_count_cache[4+8* 0], top_empty); 02264 AV_WN32A(&h->non_zero_count_cache[4+8* 5], top_empty); 02265 AV_WN32A(&h->non_zero_count_cache[4+8*10], top_empty); 02266 } 02267 } 02268 s->current_picture.mb_type[mb_xy]= mb_type; 02269 02270 if( cbp || IS_INTRA16x16( mb_type ) ) { 02271 const uint8_t *scan, *scan8x8; 02272 const uint32_t *qmul; 02273 02274 if(IS_INTERLACED(mb_type)){ 02275 scan8x8= s->qscale ? h->field_scan8x8 : h->field_scan8x8_q0; 02276 scan= s->qscale ? h->field_scan : h->field_scan_q0; 02277 }else{ 02278 scan8x8= s->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0; 02279 scan= s->qscale ? h->zigzag_scan : h->zigzag_scan_q0; 02280 } 02281 02282 // decode_cabac_mb_dqp 02283 if(get_cabac_noinline( &h->cabac, &h->cabac_state[60 + (h->last_qscale_diff != 0)])){ 02284 int val = 1; 02285 int ctx= 2; 02286 const int max_qp = 51 + 6*(h->sps.bit_depth_luma-8); 02287 02288 while( get_cabac_noinline( &h->cabac, &h->cabac_state[60 + ctx] ) ) { 02289 ctx= 3; 02290 val++; 02291 if(val > 2*max_qp){ //prevent infinite loop 02292 av_log(h->s.avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", s->mb_x, s->mb_y); 02293 return -1; 02294 } 02295 } 02296 02297 if( val&0x01 ) 02298 val= (val + 1)>>1 ; 02299 else 02300 val= -((val + 1)>>1); 02301 h->last_qscale_diff = val; 02302 s->qscale += val; 02303 if(((unsigned)s->qscale) > max_qp){ 02304 if(s->qscale<0) s->qscale+= max_qp+1; 02305 else s->qscale-= max_qp+1; 02306 } 02307 h->chroma_qp[0] = get_chroma_qp(h, 0, s->qscale); 02308 h->chroma_qp[1] = get_chroma_qp(h, 1, s->qscale); 02309 }else 02310 h->last_qscale_diff=0; 02311 02312 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 0); 02313 if(CHROMA444){ 02314 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 1); 02315 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 2); 02316 } else { 02317 if( cbp&0x30 ){ 02318 int c; 02319 for( c = 0; c < 2; c++ ) { 02320 //av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-DC\n",c ); 02321 decode_cabac_residual_dc(h, h->mb + ((256 + 16*16*c) << pixel_shift), 3, CHROMA_DC_BLOCK_INDEX+c, chroma_dc_scan, 4); 02322 } 02323 } 02324 02325 if( cbp&0x20 ) { 02326 int c, i; 02327 for( c = 0; c < 2; c++ ) { 02328 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[c]]; 02329 for( i = 0; i < 4; i++ ) { 02330 const int index = 16 + 16 * c + i; 02331 //av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-AC %d\n",c, index - 16 ); 02332 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15); 02333 } 02334 } 02335 } else { 02336 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1); 02337 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1); 02338 } 02339 } 02340 } else { 02341 fill_rectangle(&h->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1); 02342 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1); 02343 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1); 02344 h->last_qscale_diff = 0; 02345 } 02346 02347 s->current_picture.qscale_table[mb_xy]= s->qscale; 02348 write_back_non_zero_count(h); 02349 02350 if(MB_MBAFF){ 02351 h->ref_count[0] >>= 1; 02352 h->ref_count[1] >>= 1; 02353 } 02354 02355 return 0; 02356 }