OLD | NEW |
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 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 const short *qcoeff_ptr; | 206 const short *qcoeff_ptr; |
207 ENTROPY_CONTEXT * a; | 207 ENTROPY_CONTEXT * a; |
208 ENTROPY_CONTEXT * l; | 208 ENTROPY_CONTEXT * l; |
209 int band, rc, v; | 209 int band, rc, v; |
210 int tmp1, tmp2; | 210 int tmp1, tmp2; |
211 | 211 |
212 b = xd->block; | 212 b = xd->block; |
213 /* Luma */ | 213 /* Luma */ |
214 for (block = 0; block < 16; block++, b++) | 214 for (block = 0; block < 16; block++, b++) |
215 { | 215 { |
| 216 const int eob = *b->eob; |
216 tmp1 = vp8_block2above[block]; | 217 tmp1 = vp8_block2above[block]; |
217 tmp2 = vp8_block2left[block]; | 218 tmp2 = vp8_block2left[block]; |
218 qcoeff_ptr = b->qcoeff; | 219 qcoeff_ptr = b->qcoeff; |
219 a = (ENTROPY_CONTEXT *)xd->above_context + tmp1; | 220 a = (ENTROPY_CONTEXT *)xd->above_context + tmp1; |
220 l = (ENTROPY_CONTEXT *)xd->left_context + tmp2; | 221 l = (ENTROPY_CONTEXT *)xd->left_context + tmp2; |
221 | 222 |
222 VP8_COMBINEENTROPYCONTEXTS(pt, *a, *l); | 223 VP8_COMBINEENTROPYCONTEXTS(pt, *a, *l); |
223 | 224 |
224 c = type ? 0 : 1; | 225 c = type ? 0 : 1; |
225 | 226 |
226 if(c >= *b->eob) | 227 if(c >= eob) |
227 { | 228 { |
228 /* c = band for this case */ | 229 /* c = band for this case */ |
229 t->Token = DCT_EOB_TOKEN; | 230 t->Token = DCT_EOB_TOKEN; |
230 t->context_tree = cpi->common.fc.coef_probs [type] [c] [pt]; | 231 t->context_tree = cpi->common.fc.coef_probs [type] [c] [pt]; |
231 t->skip_eob_node = 0; | 232 t->skip_eob_node = 0; |
232 | 233 |
233 ++x->coef_counts [type] [c] [pt] [DCT_EOB_TOKEN]; | 234 ++x->coef_counts [type] [c] [pt] [DCT_EOB_TOKEN]; |
234 t++; | 235 t++; |
235 *tp = t; | 236 *tp = t; |
236 *a = *l = 0; | 237 *a = *l = 0; |
237 continue; | 238 continue; |
238 } | 239 } |
239 | 240 |
240 v = qcoeff_ptr[c]; | 241 v = qcoeff_ptr[c]; |
241 | 242 |
242 t->Extra = vp8_dct_value_tokens_ptr[v].Extra; | 243 t->Extra = vp8_dct_value_tokens_ptr[v].Extra; |
243 token = vp8_dct_value_tokens_ptr[v].Token; | 244 token = vp8_dct_value_tokens_ptr[v].Token; |
244 t->Token = token; | 245 t->Token = token; |
245 | 246 |
246 t->context_tree = cpi->common.fc.coef_probs [type] [c] [pt]; | 247 t->context_tree = cpi->common.fc.coef_probs [type] [c] [pt]; |
247 t->skip_eob_node = 0; | 248 t->skip_eob_node = 0; |
248 ++x->coef_counts [type] [c] [pt] [token]; | 249 ++x->coef_counts [type] [c] [pt] [token]; |
249 pt = vp8_prev_token_class[token]; | 250 pt = vp8_prev_token_class[token]; |
250 t++; | 251 t++; |
251 c++; | 252 c++; |
252 | 253 |
253 for (; c < *b->eob; c++) | 254 assert(eob <= 16); |
| 255 for (; c < eob; c++) |
254 { | 256 { |
255 rc = vp8_default_zig_zag1d[c]; | 257 rc = vp8_default_zig_zag1d[c]; |
256 band = vp8_coef_bands[c]; | 258 band = vp8_coef_bands[c]; |
257 v = qcoeff_ptr[rc]; | 259 v = qcoeff_ptr[rc]; |
258 | 260 |
259 t->Extra = vp8_dct_value_tokens_ptr[v].Extra; | 261 t->Extra = vp8_dct_value_tokens_ptr[v].Extra; |
260 token = vp8_dct_value_tokens_ptr[v].Token; | 262 token = vp8_dct_value_tokens_ptr[v].Token; |
261 | 263 |
262 t->Token = token; | 264 t->Token = token; |
263 t->context_tree = cpi->common.fc.coef_probs [type] [band] [pt]; | 265 t->context_tree = cpi->common.fc.coef_probs [type] [band] [pt]; |
(...skipping 15 matching lines...) Expand all Loading... |
279 | 281 |
280 t++; | 282 t++; |
281 } | 283 } |
282 *tp = t; | 284 *tp = t; |
283 *a = *l = 1; | 285 *a = *l = 1; |
284 } | 286 } |
285 | 287 |
286 /* Chroma */ | 288 /* Chroma */ |
287 for (block = 16; block < 24; block++, b++) | 289 for (block = 16; block < 24; block++, b++) |
288 { | 290 { |
| 291 const int eob = *b->eob; |
289 tmp1 = vp8_block2above[block]; | 292 tmp1 = vp8_block2above[block]; |
290 tmp2 = vp8_block2left[block]; | 293 tmp2 = vp8_block2left[block]; |
291 qcoeff_ptr = b->qcoeff; | 294 qcoeff_ptr = b->qcoeff; |
292 a = (ENTROPY_CONTEXT *)xd->above_context + tmp1; | 295 a = (ENTROPY_CONTEXT *)xd->above_context + tmp1; |
293 l = (ENTROPY_CONTEXT *)xd->left_context + tmp2; | 296 l = (ENTROPY_CONTEXT *)xd->left_context + tmp2; |
294 | 297 |
295 VP8_COMBINEENTROPYCONTEXTS(pt, *a, *l); | 298 VP8_COMBINEENTROPYCONTEXTS(pt, *a, *l); |
296 | 299 |
297 if(!(*b->eob)) | 300 if(!eob) |
298 { | 301 { |
299 /* c = band for this case */ | 302 /* c = band for this case */ |
300 t->Token = DCT_EOB_TOKEN; | 303 t->Token = DCT_EOB_TOKEN; |
301 t->context_tree = cpi->common.fc.coef_probs [2] [0] [pt]; | 304 t->context_tree = cpi->common.fc.coef_probs [2] [0] [pt]; |
302 t->skip_eob_node = 0; | 305 t->skip_eob_node = 0; |
303 | 306 |
304 ++x->coef_counts [2] [0] [pt] [DCT_EOB_TOKEN]; | 307 ++x->coef_counts [2] [0] [pt] [DCT_EOB_TOKEN]; |
305 t++; | 308 t++; |
306 *tp = t; | 309 *tp = t; |
307 *a = *l = 0; | 310 *a = *l = 0; |
308 continue; | 311 continue; |
309 } | 312 } |
310 | 313 |
311 v = qcoeff_ptr[0]; | 314 v = qcoeff_ptr[0]; |
312 | 315 |
313 t->Extra = vp8_dct_value_tokens_ptr[v].Extra; | 316 t->Extra = vp8_dct_value_tokens_ptr[v].Extra; |
314 token = vp8_dct_value_tokens_ptr[v].Token; | 317 token = vp8_dct_value_tokens_ptr[v].Token; |
315 t->Token = token; | 318 t->Token = token; |
316 | 319 |
317 t->context_tree = cpi->common.fc.coef_probs [2] [0] [pt]; | 320 t->context_tree = cpi->common.fc.coef_probs [2] [0] [pt]; |
318 t->skip_eob_node = 0; | 321 t->skip_eob_node = 0; |
319 ++x->coef_counts [2] [0] [pt] [token]; | 322 ++x->coef_counts [2] [0] [pt] [token]; |
320 pt = vp8_prev_token_class[token]; | 323 pt = vp8_prev_token_class[token]; |
321 t++; | 324 t++; |
322 c = 1; | 325 c = 1; |
323 | 326 |
324 for (; c < *b->eob; c++) | 327 assert(eob <= 16); |
| 328 for (; c < eob; c++) |
325 { | 329 { |
326 rc = vp8_default_zig_zag1d[c]; | 330 rc = vp8_default_zig_zag1d[c]; |
327 band = vp8_coef_bands[c]; | 331 band = vp8_coef_bands[c]; |
328 v = qcoeff_ptr[rc]; | 332 v = qcoeff_ptr[rc]; |
329 | 333 |
330 t->Extra = vp8_dct_value_tokens_ptr[v].Extra; | 334 t->Extra = vp8_dct_value_tokens_ptr[v].Extra; |
331 token = vp8_dct_value_tokens_ptr[v].Token; | 335 token = vp8_dct_value_tokens_ptr[v].Token; |
332 | 336 |
333 t->Token = token; | 337 t->Token = token; |
334 t->context_tree = cpi->common.fc.coef_probs [2] [band] [pt]; | 338 t->context_tree = cpi->common.fc.coef_probs [2] [band] [pt]; |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
595 vpx_memset(x->above_context, 0, sizeof(ENTROPY_CONTEXT_PLANES)); | 599 vpx_memset(x->above_context, 0, sizeof(ENTROPY_CONTEXT_PLANES)); |
596 vpx_memset(x->left_context, 0, sizeof(ENTROPY_CONTEXT_PLANES)); | 600 vpx_memset(x->left_context, 0, sizeof(ENTROPY_CONTEXT_PLANES)); |
597 } | 601 } |
598 else | 602 else |
599 { | 603 { |
600 vpx_memset(x->above_context, 0, sizeof(ENTROPY_CONTEXT_PLANES)-1); | 604 vpx_memset(x->above_context, 0, sizeof(ENTROPY_CONTEXT_PLANES)-1); |
601 vpx_memset(x->left_context, 0, sizeof(ENTROPY_CONTEXT_PLANES)-1); | 605 vpx_memset(x->left_context, 0, sizeof(ENTROPY_CONTEXT_PLANES)-1); |
602 } | 606 } |
603 | 607 |
604 } | 608 } |
OLD | NEW |