Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(73)

Side by Side Diff: source/libvpx/vp8/decoder/detokenize.c

Issue 7671004: Update libvpx snapshot to v0.9.7-p1 (Cayuga). (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/libvpx/
Patch Set: '' Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « source/libvpx/vp8/decoder/decodframe.c ('k') | source/libvpx/vp8/decoder/ec_types.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 20 matching lines...) Expand all
31 #define ONE_CONTEXT_NODE 2 31 #define ONE_CONTEXT_NODE 2
32 #define LOW_VAL_CONTEXT_NODE 3 32 #define LOW_VAL_CONTEXT_NODE 3
33 #define TWO_CONTEXT_NODE 4 33 #define TWO_CONTEXT_NODE 4
34 #define THREE_CONTEXT_NODE 5 34 #define THREE_CONTEXT_NODE 5
35 #define HIGH_LOW_CONTEXT_NODE 6 35 #define HIGH_LOW_CONTEXT_NODE 6
36 #define CAT_ONE_CONTEXT_NODE 7 36 #define CAT_ONE_CONTEXT_NODE 7
37 #define CAT_THREEFOUR_CONTEXT_NODE 8 37 #define CAT_THREEFOUR_CONTEXT_NODE 8
38 #define CAT_THREE_CONTEXT_NODE 9 38 #define CAT_THREE_CONTEXT_NODE 9
39 #define CAT_FIVE_CONTEXT_NODE 10 39 #define CAT_FIVE_CONTEXT_NODE 10
40 40
41 /* 41 #define CAT1_MIN_VAL 5
42 //the definition is put in "onyxd_int.h" 42 #define CAT2_MIN_VAL 7
43 typedef struct 43 #define CAT3_MIN_VAL 11
44 { 44 #define CAT4_MIN_VAL 19
45 INT16 min_val; 45 #define CAT5_MIN_VAL 35
46 INT16 Length; 46 #define CAT6_MIN_VAL 67
47 UINT8 Probs[12];
48 } TOKENEXTRABITS;
49 */
50 47
51 DECLARE_ALIGNED(16, static const TOKENEXTRABITS, vp8d_token_extra_bits2[MAX_ENTR OPY_TOKENS]) = 48 #define CAT1_PROB0 159
52 { 49 #define CAT2_PROB0 145
53 { 0, -1, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, /* ZERO_TO KEN */ 50 #define CAT2_PROB1 165
54 { 1, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, /* ONE_TOK EN */ 51
55 { 2, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, /* TWO_TOK EN */ 52 #define CAT3_PROB0 140
56 { 3, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, /* THREE_T OKEN */ 53 #define CAT3_PROB1 148
57 { 4, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, /* FOUR_TO KEN */ 54 #define CAT3_PROB2 173
58 { 5, 0, { 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, /* DCT_VAL _CATEGORY1 */ 55
59 { 7, 1, { 145, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, /* DCT_VAL _CATEGORY2 */ 56 #define CAT4_PROB0 135
60 { 11, 2, { 140, 148, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, /* DCT_VA L_CATEGORY3 */ 57 #define CAT4_PROB1 140
61 { 19, 3, { 135, 140, 155, 176, 0, 0, 0, 0, 0, 0, 0, 0 } }, /* DCT_V AL_CATEGORY4 */ 58 #define CAT4_PROB2 155
62 { 35, 4, { 130, 134, 141, 157, 180, 0, 0, 0, 0, 0, 0, 0 } }, /* DCT_ VAL_CATEGORY5 */ 59 #define CAT4_PROB3 176
63 { 67, 10, { 129, 130, 133, 140, 153, 177, 196, 230, 243, 254, 254, 0 } }, /* DCT_VAL_CATEGORY6 */ 60
64 { 0, -1, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, /* EOB TO KEN */ 61 #define CAT5_PROB0 130
65 }; 62 #define CAT5_PROB1 134
63 #define CAT5_PROB2 141
64 #define CAT5_PROB3 157
65 #define CAT5_PROB4 180
66
67 static const unsigned char cat6_prob[12] =
68 { 129, 130, 133, 140, 153, 177, 196, 230, 243, 254, 254, 0 };
66 69
67 70
68 void vp8_reset_mb_tokens_context(MACROBLOCKD *x) 71 void vp8_reset_mb_tokens_context(MACROBLOCKD *x)
69 { 72 {
70 /* Clear entropy contexts for Y2 blocks */ 73 /* Clear entropy contexts for Y2 blocks */
71 if (x->mode_info_context->mbmi.mode != B_PRED && x->mode_info_context->mbmi. mode != SPLITMV) 74 if (x->mode_info_context->mbmi.mode != B_PRED &&
75 x->mode_info_context->mbmi.mode != SPLITMV)
72 { 76 {
73 vpx_memset(x->above_context, 0, sizeof(ENTROPY_CONTEXT_PLANES)); 77 vpx_memset(x->above_context, 0, sizeof(ENTROPY_CONTEXT_PLANES));
74 vpx_memset(x->left_context, 0, sizeof(ENTROPY_CONTEXT_PLANES)); 78 vpx_memset(x->left_context, 0, sizeof(ENTROPY_CONTEXT_PLANES));
75 } 79 }
76 else 80 else
77 { 81 {
78 vpx_memset(x->above_context, 0, sizeof(ENTROPY_CONTEXT_PLANES)-1); 82 vpx_memset(x->above_context, 0, sizeof(ENTROPY_CONTEXT_PLANES)-1);
79 vpx_memset(x->left_context, 0, sizeof(ENTROPY_CONTEXT_PLANES)-1); 83 vpx_memset(x->left_context, 0, sizeof(ENTROPY_CONTEXT_PLANES)-1);
80 } 84 }
81 } 85 }
82 86
83 DECLARE_ALIGNED(16, extern const unsigned char, vp8dx_bitreader_norm[256]); 87 DECLARE_ALIGNED(16, extern const unsigned char, vp8_norm[256]);
84 #define FILL \ 88 #define FILL \
85 if(count < 0) \ 89 if(count < 0) \
86 VP8DX_BOOL_DECODER_FILL(count, value, bufptr, bufend); 90 VP8DX_BOOL_DECODER_FILL(count, value, bufptr, bufend);
87 91
88 #define NORMALIZE \ 92 #define NORMALIZE \
89 /*if(range < 0x80)*/ \ 93 /*if(range < 0x80)*/ \
90 { \ 94 { \
91 shift = vp8dx_bitreader_norm[range]; \ 95 shift = vp8_norm[range]; \
92 range <<= shift; \ 96 range <<= shift; \
93 value <<= shift; \ 97 value <<= shift; \
94 count -= shift; \ 98 count -= shift; \
95 } 99 }
96 100
97 #define DECODE_AND_APPLYSIGN(value_to_sign) \ 101 #define DECODE_AND_APPLYSIGN(value_to_sign) \
98 split = (range + 1) >> 1; \ 102 split = (range + 1) >> 1; \
99 bigsplit = (VP8_BD_VALUE)split << (VP8_BD_VALUE_SIZE - 8); \ 103 bigsplit = (VP8_BD_VALUE)split << (VP8_BD_VALUE_SIZE - 8); \
100 FILL \ 104 FILL \
101 if ( value < bigsplit ) \ 105 if ( value < bigsplit ) \
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 NORMALIZE \ 154 NORMALIZE \
151 } 155 }
152 156
153 #define DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(val) \ 157 #define DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(val) \
154 DECODE_AND_APPLYSIGN(val) \ 158 DECODE_AND_APPLYSIGN(val) \
155 Prob = coef_probs + (ENTROPY_NODES*2); \ 159 Prob = coef_probs + (ENTROPY_NODES*2); \
156 if(c < 15){\ 160 if(c < 15){\
157 qcoeff_ptr [ scan[c] ] = (INT16) v; \ 161 qcoeff_ptr [ scan[c] ] = (INT16) v; \
158 ++c; \ 162 ++c; \
159 goto DO_WHILE; }\ 163 goto DO_WHILE; }\
160 qcoeff_ptr [ scan[15] ] = (INT16) v; \ 164 qcoeff_ptr [ 15 ] = (INT16) v; \
161 goto BLOCK_FINISHED; 165 goto BLOCK_FINISHED;
162 166
163 167
164 #define DECODE_EXTRABIT_AND_ADJUST_VAL(t,bits_count)\ 168 #define DECODE_EXTRABIT_AND_ADJUST_VAL(prob, bits_count)\
165 split = 1 + (((range-1) * vp8d_token_extra_bits2[t].Probs[bits_count]) >> 8 ); \ 169 split = 1 + (((range-1) * prob) >> 8); \
166 bigsplit = (VP8_BD_VALUE)split << (VP8_BD_VALUE_SIZE - 8); \ 170 bigsplit = (VP8_BD_VALUE)split << (VP8_BD_VALUE_SIZE - 8); \
167 FILL \ 171 FILL \
168 if(value >= bigsplit)\ 172 if(value >= bigsplit)\
169 {\ 173 {\
170 range = range-split;\ 174 range = range-split;\
171 value = value-bigsplit;\ 175 value = value-bigsplit;\
172 val += ((UINT16)1<<bits_count);\ 176 val += ((UINT16)1<<bits_count);\
173 }\ 177 }\
174 else\ 178 else\
175 {\ 179 {\
176 range = split;\ 180 range = split;\
177 }\ 181 }\
178 NORMALIZE 182 NORMALIZE
179 183
180 int vp8_decode_mb_tokens(VP8D_COMP *dx, MACROBLOCKD *x) 184 int vp8_decode_mb_tokens(VP8D_COMP *dx, MACROBLOCKD *x)
181 { 185 {
182 ENTROPY_CONTEXT *A = (ENTROPY_CONTEXT *)x->above_context; 186 ENTROPY_CONTEXT *A = (ENTROPY_CONTEXT *)x->above_context;
183 ENTROPY_CONTEXT *L = (ENTROPY_CONTEXT *)x->left_context; 187 ENTROPY_CONTEXT *L = (ENTROPY_CONTEXT *)x->left_context;
184 const VP8_COMMON *const oc = & dx->common; 188 const FRAME_CONTEXT * const fc = &dx->common.fc;
185 189
186 BOOL_DECODER *bc = x->current_bc; 190 BOOL_DECODER *bc = x->current_bc;
187 191
188 char *eobs = x->eobs; 192 char *eobs = x->eobs;
189 193
190 ENTROPY_CONTEXT *a; 194 ENTROPY_CONTEXT *a;
191 ENTROPY_CONTEXT *l; 195 ENTROPY_CONTEXT *l;
192 int i; 196 int i;
193 197
194 int eobtotal = 0; 198 int eobtotal = 0;
(...skipping 18 matching lines...) Expand all
213 INT16 v; 217 INT16 v;
214 const vp8_prob *Prob; 218 const vp8_prob *Prob;
215 219
216 type = 3; 220 type = 3;
217 i = 0; 221 i = 0;
218 stop = 16; 222 stop = 16;
219 223
220 scan = vp8_default_zig_zag1d; 224 scan = vp8_default_zig_zag1d;
221 qcoeff_ptr = &x->qcoeff[0]; 225 qcoeff_ptr = &x->qcoeff[0];
222 226
223 if (x->mode_info_context->mbmi.mode != B_PRED && x->mode_info_context->mbmi. mode != SPLITMV) 227 if (x->mode_info_context->mbmi.mode != B_PRED &&
228 x->mode_info_context->mbmi.mode != SPLITMV)
224 { 229 {
225 i = 24; 230 i = 24;
226 stop = 24; 231 stop = 24;
227 type = 1; 232 type = 1;
228 qcoeff_ptr += 24*16; 233 qcoeff_ptr += 24*16;
229 eobtotal -= 16; 234 eobtotal -= 16;
230 } 235 }
231 236
232 bufend = bc->user_buffer_end; 237 bufend = bc->user_buffer_end;
233 bufptr = bc->user_buffer; 238 bufptr = bc->user_buffer;
234 value = bc->value; 239 value = bc->value;
235 count = bc->count; 240 count = bc->count;
236 range = bc->range; 241 range = bc->range;
237 242
238 243
239 coef_probs = oc->fc.coef_probs [type] [ 0 ] [0]; 244 coef_probs = fc->coef_probs [type] [ 0 ] [0];
240 245
241 BLOCK_LOOP: 246 BLOCK_LOOP:
242 a = A + vp8_block2above[i]; 247 a = A + vp8_block2above[i];
243 l = L + vp8_block2left[i]; 248 l = L + vp8_block2left[i];
244 249
245 c = (INT16)(!type); 250 c = (INT16)(!type);
246 251
247 /*Dest = ((A)!=0) + ((B)!=0);*/ 252 /*Dest = ((A)!=0) + ((B)!=0);*/
248 VP8_COMBINEENTROPYCONTEXTS(v, *a, *l); 253 VP8_COMBINEENTROPYCONTEXTS(v, *a, *l);
249 Prob = coef_probs; 254 Prob = coef_probs;
250 Prob += v * ENTROPY_NODES; 255 Prob += v * ENTROPY_NODES;
251 256
252 DO_WHILE: 257 DO_WHILE:
253 Prob += coef_bands_x[c]; 258 Prob += coef_bands_x[c];
254 DECODE_AND_BRANCH_IF_ZERO(Prob[EOB_CONTEXT_NODE], BLOCK_FINISHED); 259 DECODE_AND_BRANCH_IF_ZERO(Prob[EOB_CONTEXT_NODE], BLOCK_FINISHED);
255 260
256 CHECK_0_: 261 CHECK_0_:
257 DECODE_AND_LOOP_IF_ZERO(Prob[ZERO_CONTEXT_NODE], CHECK_0_); 262 DECODE_AND_LOOP_IF_ZERO(Prob[ZERO_CONTEXT_NODE], CHECK_0_);
258 DECODE_AND_BRANCH_IF_ZERO(Prob[ONE_CONTEXT_NODE], ONE_CONTEXT_NODE_0_); 263 DECODE_AND_BRANCH_IF_ZERO(Prob[ONE_CONTEXT_NODE], ONE_CONTEXT_NODE_0_);
259 DECODE_AND_BRANCH_IF_ZERO(Prob[LOW_VAL_CONTEXT_NODE], LOW_VAL_CONTEXT_NODE_0 _); 264 DECODE_AND_BRANCH_IF_ZERO(Prob[LOW_VAL_CONTEXT_NODE],
260 DECODE_AND_BRANCH_IF_ZERO(Prob[HIGH_LOW_CONTEXT_NODE], HIGH_LOW_CONTEXT_NODE _0_); 265 LOW_VAL_CONTEXT_NODE_0_);
261 DECODE_AND_BRANCH_IF_ZERO(Prob[CAT_THREEFOUR_CONTEXT_NODE], CAT_THREEFOUR_CO NTEXT_NODE_0_); 266 DECODE_AND_BRANCH_IF_ZERO(Prob[HIGH_LOW_CONTEXT_NODE],
262 DECODE_AND_BRANCH_IF_ZERO(Prob[CAT_FIVE_CONTEXT_NODE], CAT_FIVE_CONTEXT_NODE _0_); 267 HIGH_LOW_CONTEXT_NODE_0_);
263 val = vp8d_token_extra_bits2[DCT_VAL_CATEGORY6].min_val; 268 DECODE_AND_BRANCH_IF_ZERO(Prob[CAT_THREEFOUR_CONTEXT_NODE],
264 bits_count = vp8d_token_extra_bits2[DCT_VAL_CATEGORY6].Length; 269 CAT_THREEFOUR_CONTEXT_NODE_0_);
270 DECODE_AND_BRANCH_IF_ZERO(Prob[CAT_FIVE_CONTEXT_NODE],
271 CAT_FIVE_CONTEXT_NODE_0_);
272
273 val = CAT6_MIN_VAL;
274 bits_count = 10;
265 275
266 do 276 do
267 { 277 {
268 DECODE_EXTRABIT_AND_ADJUST_VAL(DCT_VAL_CATEGORY6, bits_count); 278 DECODE_EXTRABIT_AND_ADJUST_VAL(cat6_prob[bits_count], bits_count);
269 bits_count -- ; 279 bits_count -- ;
270 } 280 }
271 while (bits_count >= 0); 281 while (bits_count >= 0);
272 282
273 DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(val); 283 DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(val);
274 284
275 CAT_FIVE_CONTEXT_NODE_0_: 285 CAT_FIVE_CONTEXT_NODE_0_:
276 val = vp8d_token_extra_bits2[DCT_VAL_CATEGORY5].min_val; 286 val = CAT5_MIN_VAL;
277 DECODE_EXTRABIT_AND_ADJUST_VAL(DCT_VAL_CATEGORY5, 4); 287 DECODE_EXTRABIT_AND_ADJUST_VAL(CAT5_PROB4, 4);
278 DECODE_EXTRABIT_AND_ADJUST_VAL(DCT_VAL_CATEGORY5, 3); 288 DECODE_EXTRABIT_AND_ADJUST_VAL(CAT5_PROB3, 3);
279 DECODE_EXTRABIT_AND_ADJUST_VAL(DCT_VAL_CATEGORY5, 2); 289 DECODE_EXTRABIT_AND_ADJUST_VAL(CAT5_PROB2, 2);
280 DECODE_EXTRABIT_AND_ADJUST_VAL(DCT_VAL_CATEGORY5, 1); 290 DECODE_EXTRABIT_AND_ADJUST_VAL(CAT5_PROB1, 1);
281 DECODE_EXTRABIT_AND_ADJUST_VAL(DCT_VAL_CATEGORY5, 0); 291 DECODE_EXTRABIT_AND_ADJUST_VAL(CAT5_PROB0, 0);
282 DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(val); 292 DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(val);
283 293
284 CAT_THREEFOUR_CONTEXT_NODE_0_: 294 CAT_THREEFOUR_CONTEXT_NODE_0_:
285 DECODE_AND_BRANCH_IF_ZERO(Prob[CAT_THREE_CONTEXT_NODE], CAT_THREE_CONTEXT_NO DE_0_); 295 DECODE_AND_BRANCH_IF_ZERO(Prob[CAT_THREE_CONTEXT_NODE],
286 val = vp8d_token_extra_bits2[DCT_VAL_CATEGORY4].min_val; 296 CAT_THREE_CONTEXT_NODE_0_);
287 DECODE_EXTRABIT_AND_ADJUST_VAL(DCT_VAL_CATEGORY4, 3); 297 val = CAT4_MIN_VAL;
288 DECODE_EXTRABIT_AND_ADJUST_VAL(DCT_VAL_CATEGORY4, 2); 298 DECODE_EXTRABIT_AND_ADJUST_VAL(CAT4_PROB3, 3);
289 DECODE_EXTRABIT_AND_ADJUST_VAL(DCT_VAL_CATEGORY4, 1); 299 DECODE_EXTRABIT_AND_ADJUST_VAL(CAT4_PROB2, 2);
290 DECODE_EXTRABIT_AND_ADJUST_VAL(DCT_VAL_CATEGORY4, 0); 300 DECODE_EXTRABIT_AND_ADJUST_VAL(CAT4_PROB1, 1);
301 DECODE_EXTRABIT_AND_ADJUST_VAL(CAT4_PROB0, 0);
291 DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(val); 302 DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(val);
292 303
293 CAT_THREE_CONTEXT_NODE_0_: 304 CAT_THREE_CONTEXT_NODE_0_:
294 val = vp8d_token_extra_bits2[DCT_VAL_CATEGORY3].min_val; 305 val = CAT3_MIN_VAL;
295 DECODE_EXTRABIT_AND_ADJUST_VAL(DCT_VAL_CATEGORY3, 2); 306 DECODE_EXTRABIT_AND_ADJUST_VAL(CAT3_PROB2, 2);
296 DECODE_EXTRABIT_AND_ADJUST_VAL(DCT_VAL_CATEGORY3, 1); 307 DECODE_EXTRABIT_AND_ADJUST_VAL(CAT3_PROB1, 1);
297 DECODE_EXTRABIT_AND_ADJUST_VAL(DCT_VAL_CATEGORY3, 0); 308 DECODE_EXTRABIT_AND_ADJUST_VAL(CAT3_PROB0, 0);
298 DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(val); 309 DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(val);
299 310
300 HIGH_LOW_CONTEXT_NODE_0_: 311 HIGH_LOW_CONTEXT_NODE_0_:
301 DECODE_AND_BRANCH_IF_ZERO(Prob[CAT_ONE_CONTEXT_NODE], CAT_ONE_CONTEXT_NODE_0 _); 312 DECODE_AND_BRANCH_IF_ZERO(Prob[CAT_ONE_CONTEXT_NODE],
313 CAT_ONE_CONTEXT_NODE_0_);
302 314
303 val = vp8d_token_extra_bits2[DCT_VAL_CATEGORY2].min_val; 315 val = CAT2_MIN_VAL;
304 DECODE_EXTRABIT_AND_ADJUST_VAL(DCT_VAL_CATEGORY2, 1); 316 DECODE_EXTRABIT_AND_ADJUST_VAL(CAT2_PROB1, 1);
305 DECODE_EXTRABIT_AND_ADJUST_VAL(DCT_VAL_CATEGORY2, 0); 317 DECODE_EXTRABIT_AND_ADJUST_VAL(CAT2_PROB0, 0);
306 DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(val); 318 DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(val);
307 319
308 CAT_ONE_CONTEXT_NODE_0_: 320 CAT_ONE_CONTEXT_NODE_0_:
309 val = vp8d_token_extra_bits2[DCT_VAL_CATEGORY1].min_val; 321 val = CAT1_MIN_VAL;
310 DECODE_EXTRABIT_AND_ADJUST_VAL(DCT_VAL_CATEGORY1, 0); 322 DECODE_EXTRABIT_AND_ADJUST_VAL(CAT1_PROB0, 0);
311 DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(val); 323 DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(val);
312 324
313 LOW_VAL_CONTEXT_NODE_0_: 325 LOW_VAL_CONTEXT_NODE_0_:
314 DECODE_AND_BRANCH_IF_ZERO(Prob[TWO_CONTEXT_NODE], TWO_CONTEXT_NODE_0_); 326 DECODE_AND_BRANCH_IF_ZERO(Prob[TWO_CONTEXT_NODE], TWO_CONTEXT_NODE_0_);
315 DECODE_AND_BRANCH_IF_ZERO(Prob[THREE_CONTEXT_NODE], THREE_CONTEXT_NODE_0_); 327 DECODE_AND_BRANCH_IF_ZERO(Prob[THREE_CONTEXT_NODE], THREE_CONTEXT_NODE_0_);
316 DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(4); 328 DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(4);
317 329
318 THREE_CONTEXT_NODE_0_: 330 THREE_CONTEXT_NODE_0_:
319 DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(3); 331 DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(3);
320 332
321 TWO_CONTEXT_NODE_0_: 333 TWO_CONTEXT_NODE_0_:
322 DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(2); 334 DECODE_SIGN_WRITE_COEFF_AND_CHECK_EXIT(2);
323 335
324 ONE_CONTEXT_NODE_0_: 336 ONE_CONTEXT_NODE_0_:
325 DECODE_AND_APPLYSIGN(1); 337 DECODE_AND_APPLYSIGN(1);
326 Prob = coef_probs + ENTROPY_NODES; 338 Prob = coef_probs + ENTROPY_NODES;
327 339
328 if (c < 15) 340 if (c < 15)
329 { 341 {
330 qcoeff_ptr [ scan[c] ] = (INT16) v; 342 qcoeff_ptr [ scan[c] ] = (INT16) v;
331 ++c; 343 ++c;
332 goto DO_WHILE; 344 goto DO_WHILE;
333 } 345 }
334 346
335 qcoeff_ptr [ scan[15] ] = (INT16) v; 347 qcoeff_ptr [ 15 ] = (INT16) v;
336 BLOCK_FINISHED: 348 BLOCK_FINISHED:
337 *a = *l = ((eobs[i] = c) != !type); /* any nonzero data? */ 349 *a = *l = ((eobs[i] = c) != !type); /* any nonzero data? */
338 eobtotal += c; 350 eobtotal += c;
339 qcoeff_ptr += 16; 351 qcoeff_ptr += 16;
340 352
341 i++; 353 i++;
342 354
343 if (i < stop) 355 if (i < stop)
344 goto BLOCK_LOOP; 356 goto BLOCK_LOOP;
345 357
346 if (i == 25) 358 if (i == 25)
347 { 359 {
348 type = 0; 360 type = 0;
349 i = 0; 361 i = 0;
350 stop = 16; 362 stop = 16;
351 coef_probs = oc->fc.coef_probs [type] [ 0 ] [0]; 363 coef_probs = fc->coef_probs [type] [ 0 ] [0];
352 qcoeff_ptr -= (24*16 + 16); 364 qcoeff_ptr -= (24*16 + 16);
353 goto BLOCK_LOOP; 365 goto BLOCK_LOOP;
354 } 366 }
355 367
356 if (i == 16) 368 if (i == 16)
357 { 369 {
358 type = 2; 370 type = 2;
359 coef_probs = oc->fc.coef_probs [type] [ 0 ] [0]; 371 coef_probs = fc->coef_probs [type] [ 0 ] [0];
360 stop = 24; 372 stop = 24;
361 goto BLOCK_LOOP; 373 goto BLOCK_LOOP;
362 } 374 }
363 375
364 FILL 376 FILL
365 bc->user_buffer = bufptr; 377 bc->user_buffer = bufptr;
366 bc->value = value; 378 bc->value = value;
367 bc->count = count; 379 bc->count = count;
368 bc->range = range; 380 bc->range = range;
369 return eobtotal; 381 return eobtotal;
370 382
371 } 383 }
OLDNEW
« no previous file with comments | « source/libvpx/vp8/decoder/decodframe.c ('k') | source/libvpx/vp8/decoder/ec_types.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698