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 static av_always_inline void
01565 decode_cabac_residual_internal(H264Context *h, DCTELEM *block,
01566 int cat, int n, const uint8_t *scantable,
01567 const uint32_t *qmul, int max_coeff,
01568 int is_dc, int chroma422)
01569 {
01570 static const int significant_coeff_flag_offset[2][14] = {
01571 { 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 },
01572 { 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 }
01573 };
01574 static const int last_coeff_flag_offset[2][14] = {
01575 { 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 },
01576 { 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 }
01577 };
01578 static const int coeff_abs_level_m1_offset[14] = {
01579 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
01580 };
01581 static const uint8_t significant_coeff_flag_offset_8x8[2][63] = {
01582 { 0, 1, 2, 3, 4, 5, 5, 4, 4, 3, 3, 4, 4, 4, 5, 5,
01583 4, 4, 4, 4, 3, 3, 6, 7, 7, 7, 8, 9,10, 9, 8, 7,
01584 7, 6,11,12,13,11, 6, 7, 8, 9,14,10, 9, 8, 6,11,
01585 12,13,11, 6, 9,14,10, 9,11,12,13,11,14,10,12 },
01586 { 0, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 7, 7, 8, 4, 5,
01587 6, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,11,12,11,
01588 9, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,13,13, 9,
01589 9,10,10, 8,13,13, 9, 9,10,10,14,14,14,14,14 }
01590 };
01591 static const uint8_t sig_coeff_offset_dc[7] = { 0, 0, 1, 1, 2, 2, 2 };
01592
01593
01594
01595 static const uint8_t coeff_abs_level1_ctx[8] = { 1, 2, 3, 4, 0, 0, 0, 0 };
01596
01597 static const uint8_t coeff_abs_levelgt1_ctx[2][8] = {
01598 { 5, 5, 5, 5, 6, 7, 8, 9 },
01599 { 5, 5, 5, 5, 6, 7, 8, 8 },
01600 };
01601 static const uint8_t coeff_abs_level_transition[2][8] = {
01602
01603 { 1, 2, 3, 3, 4, 5, 6, 7 },
01604
01605 { 4, 4, 4, 4, 5, 6, 7, 7 }
01606 };
01607
01608 int index[64];
01609
01610 int av_unused last;
01611 int coeff_count = 0;
01612 int node_ctx = 0;
01613
01614 uint8_t *significant_coeff_ctx_base;
01615 uint8_t *last_coeff_ctx_base;
01616 uint8_t *abs_level_m1_ctx_base;
01617
01618 #if !ARCH_X86
01619 #define CABAC_ON_STACK
01620 #endif
01621 #ifdef CABAC_ON_STACK
01622 #define CC &cc
01623 CABACContext cc;
01624 cc.range = h->cabac.range;
01625 cc.low = h->cabac.low;
01626 cc.bytestream= h->cabac.bytestream;
01627 #else
01628 #define CC &h->cabac
01629 #endif
01630
01631 significant_coeff_ctx_base = h->cabac_state
01632 + significant_coeff_flag_offset[MB_FIELD][cat];
01633 last_coeff_ctx_base = h->cabac_state
01634 + last_coeff_flag_offset[MB_FIELD][cat];
01635 abs_level_m1_ctx_base = h->cabac_state
01636 + coeff_abs_level_m1_offset[cat];
01637
01638 if( !is_dc && max_coeff == 64 ) {
01639 #define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \
01640 for(last= 0; last < coefs; last++) { \
01641 uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \
01642 if( get_cabac( CC, sig_ctx )) { \
01643 uint8_t *last_ctx = last_coeff_ctx_base + last_off; \
01644 index[coeff_count++] = last; \
01645 if( get_cabac( CC, last_ctx ) ) { \
01646 last= max_coeff; \
01647 break; \
01648 } \
01649 } \
01650 }\
01651 if( last == max_coeff -1 ) {\
01652 index[coeff_count++] = last;\
01653 }
01654 const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD];
01655 #if ARCH_X86 && HAVE_7REGS
01656 coeff_count= decode_significance_8x8_x86(CC, significant_coeff_ctx_base, index,
01657 last_coeff_ctx_base, sig_off);
01658 } else {
01659 if (is_dc && chroma422) {
01660 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
01661 } else {
01662 coeff_count= decode_significance_x86(CC, max_coeff, significant_coeff_ctx_base, index,
01663 last_coeff_ctx_base-significant_coeff_ctx_base);
01664 }
01665 #else
01666 DECODE_SIGNIFICANCE( 63, sig_off[last], ff_h264_last_coeff_flag_offset_8x8[last] );
01667 } else {
01668 if (is_dc && chroma422) {
01669 DECODE_SIGNIFICANCE(7, sig_coeff_offset_dc[last], sig_coeff_offset_dc[last]);
01670 } else {
01671 DECODE_SIGNIFICANCE(max_coeff - 1, last, last);
01672 }
01673 #endif
01674 }
01675 assert(coeff_count > 0);
01676
01677 if( is_dc ) {
01678 if( cat == 3 )
01679 h->cbp_table[h->mb_xy] |= 0x40 << (n - CHROMA_DC_BLOCK_INDEX);
01680 else
01681 h->cbp_table[h->mb_xy] |= 0x100 << (n - LUMA_DC_BLOCK_INDEX);
01682 h->non_zero_count_cache[scan8[n]] = coeff_count;
01683 } else {
01684 if( max_coeff == 64 )
01685 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1);
01686 else {
01687 assert( cat == 1 || cat == 2 || cat == 4 || cat == 7 || cat == 8 || cat == 11 || cat == 12 );
01688 h->non_zero_count_cache[scan8[n]] = coeff_count;
01689 }
01690 }
01691
01692
01693 #define STORE_BLOCK(type) \
01694 do { \
01695 uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; \
01696 \
01697 int j= scantable[index[--coeff_count]]; \
01698 \
01699 if( get_cabac( CC, ctx ) == 0 ) { \
01700 node_ctx = coeff_abs_level_transition[0][node_ctx]; \
01701 if( is_dc ) { \
01702 ((type*)block)[j] = get_cabac_bypass_sign( CC, -1); \
01703 }else{ \
01704 ((type*)block)[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; \
01705 } \
01706 } else { \
01707 int coeff_abs = 2; \
01708 ctx = coeff_abs_levelgt1_ctx[is_dc && chroma422][node_ctx] + abs_level_m1_ctx_base; \
01709 node_ctx = coeff_abs_level_transition[1][node_ctx]; \
01710 \
01711 while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { \
01712 coeff_abs++; \
01713 } \
01714 \
01715 if( coeff_abs >= 15 ) { \
01716 int j = 0; \
01717 while( get_cabac_bypass( CC ) ) { \
01718 j++; \
01719 } \
01720 \
01721 coeff_abs=1; \
01722 while( j-- ) { \
01723 coeff_abs += coeff_abs + get_cabac_bypass( CC ); \
01724 } \
01725 coeff_abs+= 14; \
01726 } \
01727 \
01728 if( is_dc ) { \
01729 ((type*)block)[j] = get_cabac_bypass_sign( CC, -coeff_abs ); \
01730 }else{ \
01731 ((type*)block)[j] = ((int)(get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32)) >> 6; \
01732 } \
01733 } \
01734 } while ( coeff_count );
01735
01736 if (h->pixel_shift) {
01737 STORE_BLOCK(int32_t)
01738 } else {
01739 STORE_BLOCK(int16_t)
01740 }
01741 #ifdef CABAC_ON_STACK
01742 h->cabac.range = cc.range ;
01743 h->cabac.low = cc.low ;
01744 h->cabac.bytestream= cc.bytestream;
01745 #endif
01746
01747 }
01748
01749 static void decode_cabac_residual_dc_internal( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, int max_coeff ) {
01750 decode_cabac_residual_internal(h, block, cat, n, scantable, NULL, max_coeff, 1, 0);
01751 }
01752
01753 static void decode_cabac_residual_dc_internal_422(H264Context *h, DCTELEM *block,
01754 int cat, int n, const uint8_t *scantable,
01755 int max_coeff)
01756 {
01757 decode_cabac_residual_internal(h, block, cat, n, scantable, NULL, max_coeff, 1, 1);
01758 }
01759
01760 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 ) {
01761 decode_cabac_residual_internal(h, block, cat, n, scantable, qmul, max_coeff, 0, 0);
01762 }
01763
01764
01765
01766
01767
01768
01769
01770
01771
01772
01773
01774
01775
01776 static av_always_inline void decode_cabac_residual_dc( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, int max_coeff ) {
01777
01778 if( get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 1 ) ] ) == 0 ) {
01779 h->non_zero_count_cache[scan8[n]] = 0;
01780 return;
01781 }
01782 decode_cabac_residual_dc_internal( h, block, cat, n, scantable, max_coeff );
01783 }
01784
01785 static av_always_inline void
01786 decode_cabac_residual_dc_422(H264Context *h, DCTELEM *block,
01787 int cat, int n, const uint8_t *scantable,
01788 int max_coeff)
01789 {
01790
01791 if (get_cabac(&h->cabac, &h->cabac_state[get_cabac_cbf_ctx(h, cat, n, max_coeff, 1)]) == 0) {
01792 h->non_zero_count_cache[scan8[n]] = 0;
01793 return;
01794 }
01795 decode_cabac_residual_dc_internal_422(h, block, cat, n, scantable, max_coeff);
01796 }
01797
01798 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 ) {
01799
01800 if( (cat != 5 || CHROMA444) && get_cabac( &h->cabac, &h->cabac_state[get_cabac_cbf_ctx( h, cat, n, max_coeff, 0 ) ] ) == 0 ) {
01801 if( max_coeff == 64 ) {
01802 fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, 0, 1);
01803 } else {
01804 h->non_zero_count_cache[scan8[n]] = 0;
01805 }
01806 return;
01807 }
01808 decode_cabac_residual_nondc_internal( h, block, cat, n, scantable, qmul, max_coeff );
01809 }
01810
01811 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 )
01812 {
01813 static const uint8_t ctx_cat[4][3] = {{0,6,10},{1,7,11},{2,8,12},{5,9,13}};
01814 const uint32_t *qmul;
01815 int i8x8, i4x4;
01816 MpegEncContext * const s = &h->s;
01817 int qscale = p == 0 ? s->qscale : h->chroma_qp[p-1];
01818 if( IS_INTRA16x16( mb_type ) ) {
01819
01820 AV_ZERO128(h->mb_luma_dc[p]+0);
01821 AV_ZERO128(h->mb_luma_dc[p]+8);
01822 AV_ZERO128(h->mb_luma_dc[p]+16);
01823 AV_ZERO128(h->mb_luma_dc[p]+24);
01824 decode_cabac_residual_dc(h, h->mb_luma_dc[p], ctx_cat[0][p], LUMA_DC_BLOCK_INDEX+p, scan, 16);
01825
01826 if( cbp&15 ) {
01827 qmul = h->dequant4_coeff[p][qscale];
01828 for( i4x4 = 0; i4x4 < 16; i4x4++ ) {
01829 const int index = 16*p + i4x4;
01830
01831 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[1][p], index, scan + 1, qmul, 15);
01832 }
01833 } else {
01834 fill_rectangle(&h->non_zero_count_cache[scan8[16*p]], 4, 4, 8, 0, 1);
01835 }
01836 } else {
01837 int cqm = (IS_INTRA( mb_type ) ? 0:3) + p;
01838 for( i8x8 = 0; i8x8 < 4; i8x8++ ) {
01839 if( cbp & (1<<i8x8) ) {
01840 if( IS_8x8DCT(mb_type) ) {
01841 const int index = 16*p + 4*i8x8;
01842 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[3][p], index,
01843 scan8x8, h->dequant8_coeff[cqm][qscale], 64);
01844 } else {
01845 qmul = h->dequant4_coeff[cqm][qscale];
01846 for( i4x4 = 0; i4x4 < 4; i4x4++ ) {
01847 const int index = 16*p + 4*i8x8 + i4x4;
01848
01849
01850 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), ctx_cat[2][p], index, scan, qmul, 16);
01851
01852 }
01853 }
01854 } else {
01855 fill_rectangle(&h->non_zero_count_cache[scan8[4*i8x8+16*p]], 2, 2, 8, 0, 1);
01856 }
01857 }
01858 }
01859 }
01860
01865 int ff_h264_decode_mb_cabac(H264Context *h) {
01866 MpegEncContext * const s = &h->s;
01867 int mb_xy;
01868 int mb_type, partition_count, cbp = 0;
01869 int dct8x8_allowed= h->pps.transform_8x8_mode;
01870 int decode_chroma = h->sps.chroma_format_idc == 1 || h->sps.chroma_format_idc == 2;
01871 const int pixel_shift = h->pixel_shift;
01872
01873 mb_xy = h->mb_xy = s->mb_x + s->mb_y*s->mb_stride;
01874
01875 tprintf(s->avctx, "pic:%d mb:%d/%d\n", h->frame_num, s->mb_x, s->mb_y);
01876 if( h->slice_type_nos != AV_PICTURE_TYPE_I ) {
01877 int skip;
01878
01879 if( FRAME_MBAFF && (s->mb_y&1)==1 && h->prev_mb_skipped )
01880 skip = h->next_mb_skipped;
01881 else
01882 skip = decode_cabac_mb_skip( h, s->mb_x, s->mb_y );
01883
01884 if( skip ) {
01885 if( FRAME_MBAFF && (s->mb_y&1)==0 ){
01886 s->current_picture.f.mb_type[mb_xy] = MB_TYPE_SKIP;
01887 h->next_mb_skipped = decode_cabac_mb_skip( h, s->mb_x, s->mb_y+1 );
01888 if(!h->next_mb_skipped)
01889 h->mb_mbaff = h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
01890 }
01891
01892 decode_mb_skip(h);
01893
01894 h->cbp_table[mb_xy] = 0;
01895 h->chroma_pred_mode_table[mb_xy] = 0;
01896 h->last_qscale_diff = 0;
01897
01898 return 0;
01899
01900 }
01901 }
01902 if(FRAME_MBAFF){
01903 if( (s->mb_y&1) == 0 )
01904 h->mb_mbaff =
01905 h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
01906 }
01907
01908 h->prev_mb_skipped = 0;
01909
01910 fill_decode_neighbors(h, -(MB_FIELD));
01911
01912 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) {
01913 int ctx = 0;
01914 assert(h->slice_type_nos == AV_PICTURE_TYPE_B);
01915
01916 if( !IS_DIRECT( h->left_type[LTOP]-1 ) )
01917 ctx++;
01918 if( !IS_DIRECT( h->top_type-1 ) )
01919 ctx++;
01920
01921 if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+ctx] ) ){
01922 mb_type= 0;
01923 }else if( !get_cabac_noinline( &h->cabac, &h->cabac_state[27+3] ) ) {
01924 mb_type= 1 + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] );
01925 }else{
01926 int bits;
01927 bits = get_cabac_noinline( &h->cabac, &h->cabac_state[27+4] ) << 3;
01928 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 2;
01929 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] ) << 1;
01930 bits+= get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] );
01931 if( bits < 8 ){
01932 mb_type= bits + 3;
01933 }else if( bits == 13 ){
01934 mb_type= decode_cabac_intra_mb_type(h, 32, 0);
01935 goto decode_intra_mb;
01936 }else if( bits == 14 ){
01937 mb_type= 11;
01938 }else if( bits == 15 ){
01939 mb_type= 22;
01940 }else{
01941 bits= ( bits<<1 ) + get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] );
01942 mb_type= bits - 4;
01943 }
01944 }
01945 partition_count= b_mb_type_info[mb_type].partition_count;
01946 mb_type= b_mb_type_info[mb_type].type;
01947 } else if( h->slice_type_nos == AV_PICTURE_TYPE_P ) {
01948 if( get_cabac_noinline( &h->cabac, &h->cabac_state[14] ) == 0 ) {
01949
01950 if( get_cabac_noinline( &h->cabac, &h->cabac_state[15] ) == 0 ) {
01951
01952 mb_type= 3 * get_cabac_noinline( &h->cabac, &h->cabac_state[16] );
01953 } else {
01954
01955 mb_type= 2 - get_cabac_noinline( &h->cabac, &h->cabac_state[17] );
01956 }
01957 partition_count= p_mb_type_info[mb_type].partition_count;
01958 mb_type= p_mb_type_info[mb_type].type;
01959 } else {
01960 mb_type= decode_cabac_intra_mb_type(h, 17, 0);
01961 goto decode_intra_mb;
01962 }
01963 } else {
01964 mb_type= decode_cabac_intra_mb_type(h, 3, 1);
01965 if(h->slice_type == AV_PICTURE_TYPE_SI && mb_type)
01966 mb_type--;
01967 assert(h->slice_type_nos == AV_PICTURE_TYPE_I);
01968 decode_intra_mb:
01969 partition_count = 0;
01970 cbp= i_mb_type_info[mb_type].cbp;
01971 h->intra16x16_pred_mode= i_mb_type_info[mb_type].pred_mode;
01972 mb_type= i_mb_type_info[mb_type].type;
01973 }
01974 if(MB_FIELD)
01975 mb_type |= MB_TYPE_INTERLACED;
01976
01977 h->slice_table[ mb_xy ]= h->slice_num;
01978
01979 if(IS_INTRA_PCM(mb_type)) {
01980 const int mb_size = ff_h264_mb_sizes[h->sps.chroma_format_idc] *
01981 h->sps.bit_depth_luma >> 3;
01982 const uint8_t *ptr;
01983
01984
01985
01986
01987 ptr= h->cabac.bytestream;
01988 if(h->cabac.low&0x1) ptr--;
01989 if(CABAC_BITS==16){
01990 if(h->cabac.low&0x1FF) ptr--;
01991 }
01992
01993
01994 if ((int) (h->cabac.bytestream_end - ptr) < mb_size)
01995 return -1;
01996 memcpy(h->mb, ptr, mb_size); ptr+=mb_size;
01997
01998 ff_init_cabac_decoder(&h->cabac, ptr, h->cabac.bytestream_end - ptr);
01999
02000
02001 h->cbp_table[mb_xy] = 0xf7ef;
02002 h->chroma_pred_mode_table[mb_xy] = 0;
02003
02004 s->current_picture.f.qscale_table[mb_xy] = 0;
02005
02006 memset(h->non_zero_count[mb_xy], 16, 48);
02007 s->current_picture.f.mb_type[mb_xy] = mb_type;
02008 h->last_qscale_diff = 0;
02009 return 0;
02010 }
02011
02012 if(MB_MBAFF){
02013 h->ref_count[0] <<= 1;
02014 h->ref_count[1] <<= 1;
02015 }
02016
02017 fill_decode_caches(h, mb_type);
02018
02019 if( IS_INTRA( mb_type ) ) {
02020 int i, pred_mode;
02021 if( IS_INTRA4x4( mb_type ) ) {
02022 if( dct8x8_allowed && get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] ) ) {
02023 mb_type |= MB_TYPE_8x8DCT;
02024 for( i = 0; i < 16; i+=4 ) {
02025 int pred = pred_intra_mode( h, i );
02026 int mode = decode_cabac_mb_intra4x4_pred_mode( h, pred );
02027 fill_rectangle( &h->intra4x4_pred_mode_cache[ scan8[i] ], 2, 2, 8, mode, 1 );
02028 }
02029 } else {
02030 for( i = 0; i < 16; i++ ) {
02031 int pred = pred_intra_mode( h, i );
02032 h->intra4x4_pred_mode_cache[ scan8[i] ] = decode_cabac_mb_intra4x4_pred_mode( h, pred );
02033
02034
02035 }
02036 }
02037 write_back_intra_pred_mode(h);
02038 if( ff_h264_check_intra4x4_pred_mode(h) < 0 ) return -1;
02039 } else {
02040 h->intra16x16_pred_mode= ff_h264_check_intra_pred_mode( h, h->intra16x16_pred_mode, 0 );
02041 if( h->intra16x16_pred_mode < 0 ) return -1;
02042 }
02043 if(decode_chroma){
02044 h->chroma_pred_mode_table[mb_xy] =
02045 pred_mode = decode_cabac_mb_chroma_pre_mode( h );
02046
02047 pred_mode= ff_h264_check_intra_pred_mode( h, pred_mode, 1 );
02048 if( pred_mode < 0 ) return -1;
02049 h->chroma_pred_mode= pred_mode;
02050 } else {
02051 h->chroma_pred_mode= DC_128_PRED8x8;
02052 }
02053 } else if( partition_count == 4 ) {
02054 int i, j, sub_partition_count[4], list, ref[2][4];
02055
02056 if( h->slice_type_nos == AV_PICTURE_TYPE_B ) {
02057 for( i = 0; i < 4; i++ ) {
02058 h->sub_mb_type[i] = decode_cabac_b_mb_sub_type( h );
02059 sub_partition_count[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count;
02060 h->sub_mb_type[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].type;
02061 }
02062 if( IS_DIRECT(h->sub_mb_type[0] | h->sub_mb_type[1] |
02063 h->sub_mb_type[2] | h->sub_mb_type[3]) ) {
02064 ff_h264_pred_direct_motion(h, &mb_type);
02065 h->ref_cache[0][scan8[4]] =
02066 h->ref_cache[1][scan8[4]] =
02067 h->ref_cache[0][scan8[12]] =
02068 h->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE;
02069 for( i = 0; i < 4; i++ )
02070 fill_rectangle( &h->direct_cache[scan8[4*i]], 2, 2, 8, (h->sub_mb_type[i]>>1)&0xFF, 1 );
02071 }
02072 } else {
02073 for( i = 0; i < 4; i++ ) {
02074 h->sub_mb_type[i] = decode_cabac_p_mb_sub_type( h );
02075 sub_partition_count[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count;
02076 h->sub_mb_type[i]= p_sub_mb_type_info[ h->sub_mb_type[i] ].type;
02077 }
02078 }
02079
02080 for( list = 0; list < h->list_count; list++ ) {
02081 for( i = 0; i < 4; i++ ) {
02082 if(IS_DIRECT(h->sub_mb_type[i])) continue;
02083 if(IS_DIR(h->sub_mb_type[i], 0, list)){
02084 if( h->ref_count[list] > 1 ){
02085 ref[list][i] = decode_cabac_mb_ref( h, list, 4*i );
02086 if(ref[list][i] >= (unsigned)h->ref_count[list]){
02087 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], h->ref_count[list]);
02088 return -1;
02089 }
02090 }else
02091 ref[list][i] = 0;
02092 } else {
02093 ref[list][i] = -1;
02094 }
02095 h->ref_cache[list][ scan8[4*i]+1 ]=
02096 h->ref_cache[list][ scan8[4*i]+8 ]=h->ref_cache[list][ scan8[4*i]+9 ]= ref[list][i];
02097 }
02098 }
02099
02100 if(dct8x8_allowed)
02101 dct8x8_allowed = get_dct8x8_allowed(h);
02102
02103 for(list=0; list<h->list_count; list++){
02104 for(i=0; i<4; i++){
02105 h->ref_cache[list][ scan8[4*i] ]=h->ref_cache[list][ scan8[4*i]+1 ];
02106 if(IS_DIRECT(h->sub_mb_type[i])){
02107 fill_rectangle(h->mvd_cache[list][scan8[4*i]], 2, 2, 8, 0, 2);
02108 continue;
02109 }
02110
02111 if(IS_DIR(h->sub_mb_type[i], 0, list) && !IS_DIRECT(h->sub_mb_type[i])){
02112 const int sub_mb_type= h->sub_mb_type[i];
02113 const int block_width= (sub_mb_type & (MB_TYPE_16x16|MB_TYPE_16x8)) ? 2 : 1;
02114 for(j=0; j<sub_partition_count[i]; j++){
02115 int mpx, mpy;
02116 int mx, my;
02117 const int index= 4*i + block_width*j;
02118 int16_t (* mv_cache)[2]= &h->mv_cache[list][ scan8[index] ];
02119 uint8_t (* mvd_cache)[2]= &h->mvd_cache[list][ scan8[index] ];
02120 pred_motion(h, index, block_width, list, h->ref_cache[list][ scan8[index] ], &mx, &my);
02121 DECODE_CABAC_MB_MVD( h, list, index)
02122 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
02123
02124 if(IS_SUB_8X8(sub_mb_type)){
02125 mv_cache[ 1 ][0]=
02126 mv_cache[ 8 ][0]= mv_cache[ 9 ][0]= mx;
02127 mv_cache[ 1 ][1]=
02128 mv_cache[ 8 ][1]= mv_cache[ 9 ][1]= my;
02129
02130 mvd_cache[ 1 ][0]=
02131 mvd_cache[ 8 ][0]= mvd_cache[ 9 ][0]= mpx;
02132 mvd_cache[ 1 ][1]=
02133 mvd_cache[ 8 ][1]= mvd_cache[ 9 ][1]= mpy;
02134 }else if(IS_SUB_8X4(sub_mb_type)){
02135 mv_cache[ 1 ][0]= mx;
02136 mv_cache[ 1 ][1]= my;
02137
02138 mvd_cache[ 1 ][0]= mpx;
02139 mvd_cache[ 1 ][1]= mpy;
02140 }else if(IS_SUB_4X8(sub_mb_type)){
02141 mv_cache[ 8 ][0]= mx;
02142 mv_cache[ 8 ][1]= my;
02143
02144 mvd_cache[ 8 ][0]= mpx;
02145 mvd_cache[ 8 ][1]= mpy;
02146 }
02147 mv_cache[ 0 ][0]= mx;
02148 mv_cache[ 0 ][1]= my;
02149
02150 mvd_cache[ 0 ][0]= mpx;
02151 mvd_cache[ 0 ][1]= mpy;
02152 }
02153 }else{
02154 fill_rectangle(h->mv_cache [list][ scan8[4*i] ], 2, 2, 8, 0, 4);
02155 fill_rectangle(h->mvd_cache[list][ scan8[4*i] ], 2, 2, 8, 0, 2);
02156 }
02157 }
02158 }
02159 } else if( IS_DIRECT(mb_type) ) {
02160 ff_h264_pred_direct_motion(h, &mb_type);
02161 fill_rectangle(h->mvd_cache[0][scan8[0]], 4, 4, 8, 0, 2);
02162 fill_rectangle(h->mvd_cache[1][scan8[0]], 4, 4, 8, 0, 2);
02163 dct8x8_allowed &= h->sps.direct_8x8_inference_flag;
02164 } else {
02165 int list, i;
02166 if(IS_16X16(mb_type)){
02167 for(list=0; list<h->list_count; list++){
02168 if(IS_DIR(mb_type, 0, list)){
02169 int ref;
02170 if(h->ref_count[list] > 1){
02171 ref= decode_cabac_mb_ref(h, list, 0);
02172 if(ref >= (unsigned)h->ref_count[list]){
02173 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]);
02174 return -1;
02175 }
02176 }else
02177 ref=0;
02178 fill_rectangle(&h->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
02179 }
02180 }
02181 for(list=0; list<h->list_count; list++){
02182 if(IS_DIR(mb_type, 0, list)){
02183 int mx,my,mpx,mpy;
02184 pred_motion(h, 0, 4, list, h->ref_cache[list][ scan8[0] ], &mx, &my);
02185 DECODE_CABAC_MB_MVD( h, list, 0)
02186 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
02187
02188 fill_rectangle(h->mvd_cache[list][ scan8[0] ], 4, 4, 8, pack8to16(mpx,mpy), 2);
02189 fill_rectangle(h->mv_cache[list][ scan8[0] ], 4, 4, 8, pack16to32(mx,my), 4);
02190 }
02191 }
02192 }
02193 else if(IS_16X8(mb_type)){
02194 for(list=0; list<h->list_count; list++){
02195 for(i=0; i<2; i++){
02196 if(IS_DIR(mb_type, i, list)){
02197 int ref;
02198 if(h->ref_count[list] > 1){
02199 ref= decode_cabac_mb_ref( h, list, 8*i );
02200 if(ref >= (unsigned)h->ref_count[list]){
02201 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]);
02202 return -1;
02203 }
02204 }else
02205 ref=0;
02206 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
02207 }else
02208 fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
02209 }
02210 }
02211 for(list=0; list<h->list_count; list++){
02212 for(i=0; i<2; i++){
02213 if(IS_DIR(mb_type, i, list)){
02214 int mx,my,mpx,mpy;
02215 pred_16x8_motion(h, 8*i, list, h->ref_cache[list][scan8[0] + 16*i], &mx, &my);
02216 DECODE_CABAC_MB_MVD( h, list, 8*i)
02217 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
02218
02219 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack8to16(mpx,mpy), 2);
02220 fill_rectangle(h->mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, pack16to32(mx,my), 4);
02221 }else{
02222 fill_rectangle(h->mvd_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 2);
02223 fill_rectangle(h-> mv_cache[list][ scan8[0] + 16*i ], 4, 2, 8, 0, 4);
02224 }
02225 }
02226 }
02227 }else{
02228 assert(IS_8X16(mb_type));
02229 for(list=0; list<h->list_count; list++){
02230 for(i=0; i<2; i++){
02231 if(IS_DIR(mb_type, i, list)){
02232 int ref;
02233 if(h->ref_count[list] > 1){
02234 ref= decode_cabac_mb_ref( h, list, 4*i );
02235 if(ref >= (unsigned)h->ref_count[list]){
02236 av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]);
02237 return -1;
02238 }
02239 }else
02240 ref=0;
02241 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
02242 }else
02243 fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
02244 }
02245 }
02246 for(list=0; list<h->list_count; list++){
02247 for(i=0; i<2; i++){
02248 if(IS_DIR(mb_type, i, list)){
02249 int mx,my,mpx,mpy;
02250 pred_8x16_motion(h, i*4, list, h->ref_cache[list][ scan8[0] + 2*i ], &mx, &my);
02251 DECODE_CABAC_MB_MVD( h, list, 4*i)
02252
02253 tprintf(s->avctx, "final mv:%d %d\n", mx, my);
02254 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack8to16(mpx,mpy), 2);
02255 fill_rectangle(h->mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, pack16to32(mx,my), 4);
02256 }else{
02257 fill_rectangle(h->mvd_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 2);
02258 fill_rectangle(h-> mv_cache[list][ scan8[0] + 2*i ], 2, 4, 8, 0, 4);
02259 }
02260 }
02261 }
02262 }
02263 }
02264
02265 if( IS_INTER( mb_type ) ) {
02266 h->chroma_pred_mode_table[mb_xy] = 0;
02267 write_back_motion( h, mb_type );
02268 }
02269
02270 if( !IS_INTRA16x16( mb_type ) ) {
02271 cbp = decode_cabac_mb_cbp_luma( h );
02272 if(decode_chroma)
02273 cbp |= decode_cabac_mb_cbp_chroma( h ) << 4;
02274 }
02275
02276 h->cbp_table[mb_xy] = h->cbp = cbp;
02277
02278 if( dct8x8_allowed && (cbp&15) && !IS_INTRA( mb_type ) ) {
02279 mb_type |= MB_TYPE_8x8DCT * get_cabac_noinline( &h->cabac, &h->cabac_state[399 + h->neighbor_transform_size] );
02280 }
02281
02282
02283
02284 if (CHROMA444 && IS_8x8DCT(mb_type)){
02285 int i;
02286 uint8_t *nnz_cache = h->non_zero_count_cache;
02287 for (i = 0; i < 2; i++){
02288 if (h->left_type[LEFT(i)] && !IS_8x8DCT(h->left_type[LEFT(i)])){
02289 nnz_cache[3+8* 1 + 2*8*i]=
02290 nnz_cache[3+8* 2 + 2*8*i]=
02291 nnz_cache[3+8* 6 + 2*8*i]=
02292 nnz_cache[3+8* 7 + 2*8*i]=
02293 nnz_cache[3+8*11 + 2*8*i]=
02294 nnz_cache[3+8*12 + 2*8*i]= IS_INTRA(mb_type) ? 64 : 0;
02295 }
02296 }
02297 if (h->top_type && !IS_8x8DCT(h->top_type)){
02298 uint32_t top_empty = CABAC && !IS_INTRA(mb_type) ? 0 : 0x40404040;
02299 AV_WN32A(&nnz_cache[4+8* 0], top_empty);
02300 AV_WN32A(&nnz_cache[4+8* 5], top_empty);
02301 AV_WN32A(&nnz_cache[4+8*10], top_empty);
02302 }
02303 }
02304 s->current_picture.f.mb_type[mb_xy] = mb_type;
02305
02306 if( cbp || IS_INTRA16x16( mb_type ) ) {
02307 const uint8_t *scan, *scan8x8;
02308 const uint32_t *qmul;
02309
02310 if(IS_INTERLACED(mb_type)){
02311 scan8x8= s->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
02312 scan= s->qscale ? h->field_scan : h->field_scan_q0;
02313 }else{
02314 scan8x8= s->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
02315 scan= s->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
02316 }
02317
02318
02319 if(get_cabac_noinline( &h->cabac, &h->cabac_state[60 + (h->last_qscale_diff != 0)])){
02320 int val = 1;
02321 int ctx= 2;
02322 const int max_qp = 51 + 6*(h->sps.bit_depth_luma-8);
02323
02324 while( get_cabac_noinline( &h->cabac, &h->cabac_state[60 + ctx] ) ) {
02325 ctx= 3;
02326 val++;
02327 if(val > 2*max_qp){
02328 av_log(h->s.avctx, AV_LOG_ERROR, "cabac decode of qscale diff failed at %d %d\n", s->mb_x, s->mb_y);
02329 return -1;
02330 }
02331 }
02332
02333 if( val&0x01 )
02334 val= (val + 1)>>1 ;
02335 else
02336 val= -((val + 1)>>1);
02337 h->last_qscale_diff = val;
02338 s->qscale += val;
02339 if(((unsigned)s->qscale) > max_qp){
02340 if(s->qscale<0) s->qscale+= max_qp+1;
02341 else s->qscale-= max_qp+1;
02342 }
02343 h->chroma_qp[0] = get_chroma_qp(h, 0, s->qscale);
02344 h->chroma_qp[1] = get_chroma_qp(h, 1, s->qscale);
02345 }else
02346 h->last_qscale_diff=0;
02347
02348 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
02349 if(CHROMA444){
02350 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
02351 decode_cabac_luma_residual(h, scan, scan8x8, pixel_shift, mb_type, cbp, 2);
02352 } else if (CHROMA422) {
02353 if( cbp&0x30 ){
02354 int c;
02355 for( c = 0; c < 2; c++ ) {
02356
02357 decode_cabac_residual_dc_422(h, h->mb + ((256 + 16*16*c) << pixel_shift), 3,
02358 CHROMA_DC_BLOCK_INDEX + c,
02359 chroma422_dc_scan, 8);
02360 }
02361 }
02362
02363 if( cbp&0x20 ) {
02364 int c, i, i8x8;
02365 for( c = 0; c < 2; c++ ) {
02366 DCTELEM *mb = h->mb + (16*(16 + 16*c) << pixel_shift);
02367 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[c]];
02368 for (i8x8 = 0; i8x8 < 2; i8x8++) {
02369 for (i = 0; i < 4; i++) {
02370 const int index = 16 + 16 * c + 8*i8x8 + i;
02371
02372 decode_cabac_residual_nondc(h, mb, 4, index, scan + 1, qmul, 15);
02373 mb += 16<<pixel_shift;
02374 }
02375 }
02376 }
02377 } else {
02378 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
02379 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
02380 }
02381 } else {
02382 if( cbp&0x30 ){
02383 int c;
02384 for( c = 0; c < 2; c++ ) {
02385
02386 decode_cabac_residual_dc(h, h->mb + ((256 + 16*16*c) << pixel_shift), 3, CHROMA_DC_BLOCK_INDEX+c, chroma_dc_scan, 4);
02387 }
02388 }
02389
02390 if( cbp&0x20 ) {
02391 int c, i;
02392 for( c = 0; c < 2; c++ ) {
02393 qmul = h->dequant4_coeff[c+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[c]];
02394 for( i = 0; i < 4; i++ ) {
02395 const int index = 16 + 16 * c + i;
02396
02397 decode_cabac_residual_nondc(h, h->mb + (16*index << pixel_shift), 4, index, scan + 1, qmul, 15);
02398 }
02399 }
02400 } else {
02401 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
02402 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
02403 }
02404 }
02405 } else {
02406 fill_rectangle(&h->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
02407 fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
02408 fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
02409 h->last_qscale_diff = 0;
02410 }
02411
02412 s->current_picture.f.qscale_table[mb_xy] = s->qscale;
02413 write_back_non_zero_count(h);
02414
02415 if(MB_MBAFF){
02416 h->ref_count[0] >>= 1;
02417 h->ref_count[1] >>= 1;
02418 }
02419
02420 return 0;
02421 }