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