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 if ((int) (h->cabac.bytestream_end - ptr) < mb_size) 01962 return -1; 01963 memcpy(h->mb, ptr, mb_size); ptr+=mb_size; 01964 01965 ff_init_cabac_decoder(&h->cabac, ptr, h->cabac.bytestream_end - ptr); 01966 01967 // All blocks are present 01968 h->cbp_table[mb_xy] = 0xf7ef; 01969 h->chroma_pred_mode_table[mb_xy] = 0; 01970 // In deblocking, the quantizer is 0 01971 s->current_picture.qscale_table[mb_xy]= 0; 01972 // All coeffs are present 01973 memset(h->non_zero_count[mb_xy], 16, 48); 01974 s->current_picture.mb_type[mb_xy]= mb_type; 01975 h->last_qscale_diff = 0; 01976 return 0; 01977 } 01978 01979 if(MB_MBAFF){ 01980 h->ref_count[0] <<= 1; 01981 h->ref_count[1] <<= 1; 01982 } 01983 01984 fill_decode_caches(h, mb_type); 01985 01986 if( IS_INTRA( mb_type ) ) { 01987 int i, pred_mode; 01988 if( IS_INTRA4x4( mb_type ) ) { 01989 if( dct8x8_allowed && get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] ) ) { 01990 mb_type |= MB_TYPE_8x8DCT; 01991 for( i = 0; i < 16; i+=4 ) { 01992 int pred = pred_intra_mode( h, i ); 01993 int mode = decode_cabac_mb_intra4x4_pred_mode( h, pred ); 01994 fill_rectangle( &h->intra4x4_pred_mode_cache[ scan8[i] ], 2, 2, 8, mode, 1 ); 01995 } 01996 } else { 01997 for( i = 0; i < 16; i++ ) { 01998 int pred = pred_intra_mode( h, i ); 01999 h->intra4x4_pred_mode_cache[ scan8[i] ] = decode_cabac_mb_intra4x4_pred_mode( h, pred ); 02000 02001 //av_log( s->avctx, AV_LOG_ERROR, "i4x4 pred=%d mode=%d\n", pred, h->intra4x4_pred_mode_cache[ scan8[i] ] ); 02002 } 02003 } 02004 ff_h264_write_back_intra_pred_mode(h); 02005 if( ff_h264_check_intra4x4_pred_mode(h) < 0 ) return -1; 02006 } else { 02007 h->intra16x16_pred_mode= ff_h264_check_intra_pred_mode( h, h->intra16x16_pred_mode, 0 ); 02008 if( h->intra16x16_pred_mode < 0 ) return -1; 02009 } 02010 if(decode_chroma){ 02011 h->chroma_pred_mode_table[mb_xy] = 02012 pred_mode = decode_cabac_mb_chroma_pre_mode( h ); 02013 02014 pred_mode= ff_h264_check_intra_pred_mode( h, pred_mode, 1 ); 02015 if( pred_mode < 0 ) return -1; 02016 h->chroma_pred_mode= pred_mode; 02017 } else { 02018 h->chroma_pred_mode= DC_128_PRED8x8; 02019 } 02020 } else if( partition_count == 4 ) { 02021 int i, j, sub_partition_count[4], list, ref[2][4]; 02022 02023 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) { 02024 for( i = 0; i < 4; i++ ) { 02025 h->sub_mb_type[i] = decode_cabac_b_mb_sub_type( h ); 02026 sub_partition_count[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count; 02027 h->sub_mb_type[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].type; 02028 } 02029 if( IS_DIRECT(h->sub_mb_type[0] | h->sub_mb_type[1] | 02030 h->sub_mb_type[2] | h->sub_mb_type[3]) ) { 02031 ff_h264_pred_direct_motion(h, &mb_type); 02032 h->ref_cache[0][scan8[4]] = 02033 h->ref_cache[1][scan8[4]] = 02034 h->ref_cache[0][scan8[12]] = 02035 h->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE; 02036 for( i = 0; i < 4; i++ ) 02037 fill_rectangle( &h->direct_cache[scan8[4*i]], 2, 2, 8, (h->sub_mb_type[i]>>1)&0xFF, 1 ); 02038 } 02039 } else { 02040 for( i = 0; i < 4; i++ ) { 02041 h->sub_mb_type[i] = decode_cabac_p_mb_sub_type( h ); 02042 sub_partition_count[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count; 02043 h->sub_mb_type[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].type; 02044 } 02045 } 02046 02047 for( list = 0; list < h->list_count; list++ ) { 02048 for( i = 0; i < 4; i++ ) { 02049 if(IS_DIRECT(h->sub_mb_type[i])) continue; 02050 if(IS_DIR(h->sub_mb_type[i], 0, list)){ 02051 if( h->ref_count[list] > 1 ){ 02052 ref[list][i] = decode_cabac_mb_ref( h, list, 4*i ); 02053 if(ref[list][i] >= (unsigned)h->ref_count[list]){ 02054 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], h->ref_count[list]); 02055 return -1; 02056 } 02057 }else 02058 ref[list][i] = 0; 02059 } else { 02060 ref[list][i] = -1; 02061 } 02062 h->ref_cache[list][ scan8[4*i]+1 ]= 02063 h->ref_cache[list][ scan8[4*i]+8 ]=h->ref_cache[list][ scan8[4*i]+9 ]= ref[list][i]; 02064 } 02065 } 02066 02067 if(dct8x8_allowed) 02068 dct8x8_allowed = get_dct8x8_allowed(h); 02069 02070 for(list=0; list<h->list_count; list++){ 02071 for(i=0; i<4; i++){ 02072 h->ref_cache[list][ scan8[4*i] ]=h->ref_cache[list][ scan8[4*i]+1 ]; 02073 if(IS_DIRECT(h->sub_mb_type[i])){ 02074 fill_rectangle(h->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2); 02075 continue; 02076 } 02077 02078 if(IS_DIR(h->sub_mb_type[i], 0, list) && !IS_DIRECT(h->sub_mb_type[i])){ 02079 const int sub_mb_type= h->sub_mb_type[i]; 02080 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1; 02081 for(j=0; j<sub_partition_count[i]; j++){ 02082 int mpx, mpy; 02083 int mx, my; 02084 const int index= 4*i + block_width*j; 02085 int16_t (* mv_cache)[2]= &h->mv_cache[list][ scan8[index] ]; 02086 uint8_t (* mvd_cache)[2]= &h->mvd_cache[list][ scan8[index] ]; 02087 pred_motion(h, index, block_width, list, h->ref_cache[list][ scan8[index] ], &mx, &my); 02088 DECODE_CABAC_MB_MVD( h, list, index) 02089 tprintf(s->avctx, "final mv:%d %d\n", mx, my); 02090 02091 if(IS_SUB_8X8(sub_mb_type)){ 02092 mv_cache[ 1 ][0]= 02093 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx; 02094 mv_cache[ 1 ][1]= 02095 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my; 02096 02097 mvd_cache[ 1 ][0]= 02098 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx; 02099 mvd_cache[ 1 ][1]= 02100 mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy; 02101 }else if(IS_SUB_8X4(sub_mb_type)){ 02102 mv_cache[ 1 ][0]= mx; 02103 mv_cache[ 1 ][1]= my; 02104 02105 mvd_cache[ 1 ][0]= mpx; 02106 mvd_cache[ 1 ][1]= mpy; 02107 }else if(IS_SUB_4X8(sub_mb_type)){ 02108 mv_cache[ 8 ][0]= mx; 02109 mv_cache[ 8 ][1]= my; 02110 02111 mvd_cache[ 8 ][0]= mpx; 02112 mvd_cache[ 8 ][1]= mpy; 02113 } 02114 mv_cache[ 0 ][0]= mx; 02115 mv_cache[ 0 ][1]= my; 02116 02117 mvd_cache[ 0 ][0]= mpx; 02118 mvd_cache[ 0 ][1]= mpy; 02119 } 02120 }else{ 02121 fill_rectangle(h->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4); 02122 fill_rectangle(h->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2); 02123 } 02124 } 02125 } 02126 } else if( IS_DIRECT(mb_type) ) { 02127 ff_h264_pred_direct_motion(h, &mb_type); 02128 fill_rectangle(h->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2); 02129 fill_rectangle(h->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2); 02130 dct8x8_allowed &= h->sps.direct_8x8_inference_flag; 02131 } else { 02132 int list, i; 02133 if(IS_16X16(mb_type)){ 02134 for(list=0; list<h->list_count; list++){ 02135 if(IS_DIR(mb_type, 0, list)){ 02136 int ref; 02137 if(h->ref_count[list] > 1){ 02138 ref= decode_cabac_mb_ref(h, list, 0); 02139 if(ref >= (unsigned)h->ref_count[list]){ 02140 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]); 02141 return -1; 02142 } 02143 }else 02144 ref=0; 02145 fill_rectangle(&h->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1); 02146 } 02147 } 02148 for(list=0; list<h->list_count; list++){ 02149 if(IS_DIR(mb_type, 0, list)){ 02150 int mx,my,mpx,mpy; 02151 pred_motion(h, 0, 4, list, h->ref_cache[list][ scan8[0] ], &mx, &my); 02152 DECODE_CABAC_MB_MVD( h, list, 0) 02153 tprintf(s->avctx, "final mv:%d %d\n", mx, my); 02154 02155 fill_rectangle(h->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2); 02156 fill_rectangle(h->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4); 02157 } 02158 } 02159 } 02160 else if(IS_16X8(mb_type)){ 02161 for(list=0; list<h->list_count; list++){ 02162 for(i=0; i<2; i++){ 02163 if(IS_DIR(mb_type, i, list)){ 02164 int ref; 02165 if(h->ref_count[list] > 1){ 02166 ref= decode_cabac_mb_ref( h, list, 8*i ); 02167 if(ref >= (unsigned)h->ref_count[list]){ 02168 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]); 02169 return -1; 02170 } 02171 }else 02172 ref=0; 02173 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1); 02174 }else 02175 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1); 02176 } 02177 } 02178 for(list=0; list<h->list_count; list++){ 02179 for(i=0; i<2; i++){ 02180 if(IS_DIR(mb_type, i, list)){ 02181 int mx,my,mpx,mpy; 02182 pred_16x8_motion(h, 8*i, list, h->ref_cache[list][scan8[0] + 16*i], &mx, &my); 02183 DECODE_CABAC_MB_MVD( h, list, 8*i) 02184 tprintf(s->avctx, "final mv:%d %d\n", mx, my); 02185 02186 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2); 02187 fill_rectangle(h->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4); 02188 }else{ 02189 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2); 02190 fill_rectangle(h-> mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4); 02191 } 02192 } 02193 } 02194 }else{ 02195 assert(IS_8X16(mb_type)); 02196 for(list=0; list<h->list_count; list++){ 02197 for(i=0; i<2; i++){ 02198 if(IS_DIR(mb_type, i, list)){ //FIXME optimize 02199 int ref; 02200 if(h->ref_count[list] > 1){ 02201 ref= decode_cabac_mb_ref( h, list, 4*i ); 02202 if(ref >= (unsigned)h->ref_count[list]){ 02203 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]); 02204 return -1; 02205 } 02206 }else 02207 ref=0; 02208 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1); 02209 }else 02210 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1); 02211 } 02212 } 02213 for(list=0; list<h->list_count; list++){ 02214 for(i=0; i<2; i++){ 02215 if(IS_DIR(mb_type, i, list)){ 02216 int mx,my,mpx,mpy; 02217 pred_8x16_motion(h, i*4, list, h->ref_cache[list][ scan8[0] + 2*i ], &mx, &my); 02218 DECODE_CABAC_MB_MVD( h, list, 4*i) 02219 02220 tprintf(s->avctx, "final mv:%d %d\n", mx, my); 02221 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2); 02222 fill_rectangle(h->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4); 02223 }else{ 02224 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2); 02225 fill_rectangle(h-> mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4); 02226 } 02227 } 02228 } 02229 } 02230 } 02231 02232 if( IS_INTER( mb_type ) ) { 02233 h->chroma_pred_mode_table[mb_xy] = 0; 02234 write_back_motion( h, mb_type ); 02235 } 02236 02237 if( !IS_INTRA16x16( mb_type ) ) { 02238 cbp = decode_cabac_mb_cbp_luma( h ); 02239 if(decode_chroma) 02240 cbp |= decode_cabac_mb_cbp_chroma( h ) << 4; 02241 } 02242 02243 h->cbp_table[mb_xy] = h->cbp = cbp; 02244 02245 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) { 02246 mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] ); 02247 } 02248 02249 /* It would be better to do this in fill_decode_caches, but we don't know 02250 * the transform mode of the current macroblock there. */ 02251 if (CHROMA444 && IS_8x8DCT(mb_type)){ 02252 int i; 02253 for (i = 0; i < 2; i++){ 02254 if (h->left_type[i] && !IS_8x8DCT(h->left_type[i])){ 02255 h->non_zero_count_cache[3+8* 1 + 2*8*i]= 02256 h->non_zero_count_cache[3+8* 2 + 2*8*i]= 02257 h->non_zero_count_cache[3+8* 6 + 2*8*i]= 02258 h->non_zero_count_cache[3+8* 7 + 2*8*i]= 02259 h->non_zero_count_cache[3+8*11 + 2*8*i]= 02260 h->non_zero_count_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0; 02261 } 02262 } 02263 if (h->top_type && !IS_8x8DCT(h->top_type)){ 02264 uint32_t top_empty = CABAC && !IS_INTRA(mb_type) ? 0 : 0x40404040; 02265 AV_WN32A(&h->non_zero_count_cache[4+8* 0], top_empty); 02266 AV_WN32A(&h->non_zero_count_cache[4+8* 5], top_empty); 02267 AV_WN32A(&h->non_zero_count_cache[4+8*10], top_empty); 02268 } 02269 } 02270 s->current_picture.mb_type[mb_xy]= mb_type; 02271 02272 if( cbp || IS_INTRA16x16( mb_type ) ) { 02273 const uint8_t *scan, *scan8x8; 02274 const uint32_t *qmul; 02275 02276 if(IS_INTERLACED(mb_type)){ 02277 scan8x8= s->qscale ? h->field_scan8x8 : h->field_scan8x8_q0; 02278 scan= s->qscale ? h->field_scan : h->field_scan_q0; 02279 }else{ 02280 scan8x8= s->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0; 02281 scan= s->qscale ? h->zigzag_scan : h->zigzag_scan_q0; 02282 } 02283 02284 // decode_cabac_mb_dqp 02285 if(get_cabac_noinline( &h->cabac, &h->cabac_state[60 + (h->last_qscale_diff != 0)])){ 02286 int val = 1; 02287 int ctx= 2; 02288 const int max_qp = 51 + 6*(h->sps.bit_depth_luma-8); 02289 02290 while( get_cabac_noinline( &h->cabac, &h->cabac_state[60 + ctx] ) ) { 02291 ctx= 3; 02292 val++; 02293 if(val > 2*max_qp){ //prevent infinite loop 02294 av_log(h->s.avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", s->mb_x, s->mb_y); 02295 return -1; 02296 } 02297 } 02298 02299 if( val&0x01 ) 02300 val= (val + 1)>>1 ; 02301 else 02302 val= -((val + 1)>>1); 02303 h->last_qscale_diff = val; 02304 s->qscale += val; 02305 if(((unsigned)s->qscale) > max_qp){ 02306 if(s->qscale<0) s->qscale+= max_qp+1; 02307 else s->qscale-= max_qp+1; 02308 } 02309 h->chroma_qp[0] = get_chroma_qp(h, 0, s->qscale); 02310 h->chroma_qp[1] = get_chroma_qp(h, 1, s->qscale); 02311 }else 02312 h->last_qscale_diff=0; 02313 02314 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 0); 02315 if(CHROMA444){ 02316 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 1); 02317 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 2); 02318 } else { 02319 if( cbp&0x30 ){ 02320 int c; 02321 for( c = 0; c < 2; c++ ) { 02322 //av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-DC\n",c ); 02323 decode_cabac_residual_dc(h, h->mb + ((256 + 16*16*c) << pixel_shift), 3, CHROMA_DC_BLOCK_INDEX+c, chroma_dc_scan, 4); 02324 } 02325 } 02326 02327 if( cbp&0x20 ) { 02328 int c, i; 02329 for( c = 0; c < 2; c++ ) { 02330 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[c]]; 02331 for( i = 0; i < 4; i++ ) { 02332 const int index = 16 + 16 * c + i; 02333 //av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-AC %d\n",c, index - 16 ); 02334 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15); 02335 } 02336 } 02337 } else { 02338 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1); 02339 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1); 02340 } 02341 } 02342 } else { 02343 fill_rectangle(&h->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1); 02344 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1); 02345 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1); 02346 h->last_qscale_diff = 0; 02347 } 02348 02349 s->current_picture.qscale_table[mb_xy]= s->qscale; 02350 write_back_non_zero_count(h); 02351 02352 if(MB_MBAFF){ 02353 h->ref_count[0] >>= 1; 02354 h->ref_count[1] >>= 1; 02355 } 02356 02357 return 0; 02358 }