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

Side by Side Diff: source/libvpx/vp9/common/vp9_entropymode.c

Issue 896343003: Cherry-pick potential divide-by-zero fix (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libvpx.git@m41-2272
Patch Set: Created 5 years, 10 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
« no previous file with comments | « no previous file | source/libvpx/vp9/common/vp9_entropymv.c » ('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 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 vp9_copy(fc->skip_probs, default_skip_probs); 327 vp9_copy(fc->skip_probs, default_skip_probs);
328 vp9_copy(fc->inter_mode_probs, default_inter_mode_probs); 328 vp9_copy(fc->inter_mode_probs, default_inter_mode_probs);
329 } 329 }
330 330
331 const vp9_tree_index vp9_switchable_interp_tree 331 const vp9_tree_index vp9_switchable_interp_tree
332 [TREE_SIZE(SWITCHABLE_FILTERS)] = { 332 [TREE_SIZE(SWITCHABLE_FILTERS)] = {
333 -EIGHTTAP, 2, 333 -EIGHTTAP, 2,
334 -EIGHTTAP_SMOOTH, -EIGHTTAP_SHARP 334 -EIGHTTAP_SMOOTH, -EIGHTTAP_SHARP
335 }; 335 };
336 336
337 #define COUNT_SAT 20
338 #define MAX_UPDATE_FACTOR 128
339
340 static int adapt_prob(vp9_prob pre_prob, const unsigned int ct[2]) {
341 return merge_probs(pre_prob, ct, COUNT_SAT, MAX_UPDATE_FACTOR);
342 }
343
344 static void adapt_probs(const vp9_tree_index *tree,
345 const vp9_prob *pre_probs, const unsigned int *counts,
346 vp9_prob *probs) {
347 vp9_tree_merge_probs(tree, pre_probs, counts, COUNT_SAT, MAX_UPDATE_FACTOR,
348 probs);
349 }
350
351 void vp9_adapt_mode_probs(VP9_COMMON *cm) { 337 void vp9_adapt_mode_probs(VP9_COMMON *cm) {
352 int i, j; 338 int i, j;
353 FRAME_CONTEXT *fc = cm->fc; 339 FRAME_CONTEXT *fc = cm->fc;
354 const FRAME_CONTEXT *pre_fc = &cm->frame_contexts[cm->frame_context_idx]; 340 const FRAME_CONTEXT *pre_fc = &cm->frame_contexts[cm->frame_context_idx];
355 const FRAME_COUNTS *counts = &cm->counts; 341 const FRAME_COUNTS *counts = &cm->counts;
356 342
357 for (i = 0; i < INTRA_INTER_CONTEXTS; i++) 343 for (i = 0; i < INTRA_INTER_CONTEXTS; i++)
358 fc->intra_inter_prob[i] = adapt_prob(pre_fc->intra_inter_prob[i], 344 fc->intra_inter_prob[i] = mode_mv_merge_probs(pre_fc->intra_inter_prob[i],
359 counts->intra_inter[i]); 345 counts->intra_inter[i]);
360 for (i = 0; i < COMP_INTER_CONTEXTS; i++) 346 for (i = 0; i < COMP_INTER_CONTEXTS; i++)
361 fc->comp_inter_prob[i] = adapt_prob(pre_fc->comp_inter_prob[i], 347 fc->comp_inter_prob[i] = mode_mv_merge_probs(pre_fc->comp_inter_prob[i],
362 counts->comp_inter[i]); 348 counts->comp_inter[i]);
363 for (i = 0; i < REF_CONTEXTS; i++) 349 for (i = 0; i < REF_CONTEXTS; i++)
364 fc->comp_ref_prob[i] = adapt_prob(pre_fc->comp_ref_prob[i], 350 fc->comp_ref_prob[i] = mode_mv_merge_probs(pre_fc->comp_ref_prob[i],
365 counts->comp_ref[i]); 351 counts->comp_ref[i]);
366 for (i = 0; i < REF_CONTEXTS; i++) 352 for (i = 0; i < REF_CONTEXTS; i++)
367 for (j = 0; j < 2; j++) 353 for (j = 0; j < 2; j++)
368 fc->single_ref_prob[i][j] = adapt_prob(pre_fc->single_ref_prob[i][j], 354 fc->single_ref_prob[i][j] = mode_mv_merge_probs(
369 counts->single_ref[i][j]); 355 pre_fc->single_ref_prob[i][j], counts->single_ref[i][j]);
370 356
371 for (i = 0; i < INTER_MODE_CONTEXTS; i++) 357 for (i = 0; i < INTER_MODE_CONTEXTS; i++)
372 adapt_probs(vp9_inter_mode_tree, pre_fc->inter_mode_probs[i], 358 vp9_tree_merge_probs(vp9_inter_mode_tree, pre_fc->inter_mode_probs[i],
373 counts->inter_mode[i], fc->inter_mode_probs[i]); 359 counts->inter_mode[i], fc->inter_mode_probs[i]);
374 360
375 for (i = 0; i < BLOCK_SIZE_GROUPS; i++) 361 for (i = 0; i < BLOCK_SIZE_GROUPS; i++)
376 adapt_probs(vp9_intra_mode_tree, pre_fc->y_mode_prob[i], 362 vp9_tree_merge_probs(vp9_intra_mode_tree, pre_fc->y_mode_prob[i],
377 counts->y_mode[i], fc->y_mode_prob[i]); 363 counts->y_mode[i], fc->y_mode_prob[i]);
378 364
379 for (i = 0; i < INTRA_MODES; ++i) 365 for (i = 0; i < INTRA_MODES; ++i)
380 adapt_probs(vp9_intra_mode_tree, pre_fc->uv_mode_prob[i], 366 vp9_tree_merge_probs(vp9_intra_mode_tree, pre_fc->uv_mode_prob[i],
381 counts->uv_mode[i], fc->uv_mode_prob[i]); 367 counts->uv_mode[i], fc->uv_mode_prob[i]);
382 368
383 for (i = 0; i < PARTITION_CONTEXTS; i++) 369 for (i = 0; i < PARTITION_CONTEXTS; i++)
384 adapt_probs(vp9_partition_tree, pre_fc->partition_prob[i], 370 vp9_tree_merge_probs(vp9_partition_tree, pre_fc->partition_prob[i],
385 counts->partition[i], fc->partition_prob[i]); 371 counts->partition[i], fc->partition_prob[i]);
386 372
387 if (cm->interp_filter == SWITCHABLE) { 373 if (cm->interp_filter == SWITCHABLE) {
388 for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; i++) 374 for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; i++)
389 adapt_probs(vp9_switchable_interp_tree, pre_fc->switchable_interp_prob[i], 375 vp9_tree_merge_probs(vp9_switchable_interp_tree,
390 counts->switchable_interp[i], fc->switchable_interp_prob[i]); 376 pre_fc->switchable_interp_prob[i],
377 counts->switchable_interp[i],
378 fc->switchable_interp_prob[i]);
391 } 379 }
392 380
393 if (cm->tx_mode == TX_MODE_SELECT) { 381 if (cm->tx_mode == TX_MODE_SELECT) {
394 int j; 382 int j;
395 unsigned int branch_ct_8x8p[TX_SIZES - 3][2]; 383 unsigned int branch_ct_8x8p[TX_SIZES - 3][2];
396 unsigned int branch_ct_16x16p[TX_SIZES - 2][2]; 384 unsigned int branch_ct_16x16p[TX_SIZES - 2][2];
397 unsigned int branch_ct_32x32p[TX_SIZES - 1][2]; 385 unsigned int branch_ct_32x32p[TX_SIZES - 1][2];
398 386
399 for (i = 0; i < TX_SIZE_CONTEXTS; ++i) { 387 for (i = 0; i < TX_SIZE_CONTEXTS; ++i) {
400 tx_counts_to_branch_counts_8x8(counts->tx.p8x8[i], branch_ct_8x8p); 388 tx_counts_to_branch_counts_8x8(counts->tx.p8x8[i], branch_ct_8x8p);
401 for (j = 0; j < TX_SIZES - 3; ++j) 389 for (j = 0; j < TX_SIZES - 3; ++j)
402 fc->tx_probs.p8x8[i][j] = adapt_prob(pre_fc->tx_probs.p8x8[i][j], 390 fc->tx_probs.p8x8[i][j] = mode_mv_merge_probs(
403 branch_ct_8x8p[j]); 391 pre_fc->tx_probs.p8x8[i][j], branch_ct_8x8p[j]);
404 392
405 tx_counts_to_branch_counts_16x16(counts->tx.p16x16[i], branch_ct_16x16p); 393 tx_counts_to_branch_counts_16x16(counts->tx.p16x16[i], branch_ct_16x16p);
406 for (j = 0; j < TX_SIZES - 2; ++j) 394 for (j = 0; j < TX_SIZES - 2; ++j)
407 fc->tx_probs.p16x16[i][j] = adapt_prob(pre_fc->tx_probs.p16x16[i][j], 395 fc->tx_probs.p16x16[i][j] = mode_mv_merge_probs(
408 branch_ct_16x16p[j]); 396 pre_fc->tx_probs.p16x16[i][j], branch_ct_16x16p[j]);
409 397
410 tx_counts_to_branch_counts_32x32(counts->tx.p32x32[i], branch_ct_32x32p); 398 tx_counts_to_branch_counts_32x32(counts->tx.p32x32[i], branch_ct_32x32p);
411 for (j = 0; j < TX_SIZES - 1; ++j) 399 for (j = 0; j < TX_SIZES - 1; ++j)
412 fc->tx_probs.p32x32[i][j] = adapt_prob(pre_fc->tx_probs.p32x32[i][j], 400 fc->tx_probs.p32x32[i][j] = mode_mv_merge_probs(
413 branch_ct_32x32p[j]); 401 pre_fc->tx_probs.p32x32[i][j], branch_ct_32x32p[j]);
414 } 402 }
415 } 403 }
416 404
417 for (i = 0; i < SKIP_CONTEXTS; ++i) 405 for (i = 0; i < SKIP_CONTEXTS; ++i)
418 fc->skip_probs[i] = adapt_prob(pre_fc->skip_probs[i], counts->skip[i]); 406 fc->skip_probs[i] = mode_mv_merge_probs(
407 pre_fc->skip_probs[i], counts->skip[i]);
419 } 408 }
420 409
421 static void set_default_lf_deltas(struct loopfilter *lf) { 410 static void set_default_lf_deltas(struct loopfilter *lf) {
422 lf->mode_ref_delta_enabled = 1; 411 lf->mode_ref_delta_enabled = 1;
423 lf->mode_ref_delta_update = 1; 412 lf->mode_ref_delta_update = 1;
424 413
425 lf->ref_deltas[INTRA_FRAME] = 1; 414 lf->ref_deltas[INTRA_FRAME] = 1;
426 lf->ref_deltas[LAST_FRAME] = 0; 415 lf->ref_deltas[LAST_FRAME] = 0;
427 lf->ref_deltas[GOLDEN_FRAME] = -1; 416 lf->ref_deltas[GOLDEN_FRAME] = -1;
428 lf->ref_deltas[ALTREF_FRAME] = -1; 417 lf->ref_deltas[ALTREF_FRAME] = -1;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 if (frame_is_intra_only(cm) && cm->prev_mip) 457 if (frame_is_intra_only(cm) && cm->prev_mip)
469 vpx_memset(cm->prev_mip, 0, cm->mi_stride * (cm->mi_rows + 1) * 458 vpx_memset(cm->prev_mip, 0, cm->mi_stride * (cm->mi_rows + 1) *
470 sizeof(*cm->prev_mip)); 459 sizeof(*cm->prev_mip));
471 460
472 vpx_memset(cm->mip, 0, cm->mi_stride * (cm->mi_rows + 1) * sizeof(*cm->mip)); 461 vpx_memset(cm->mip, 0, cm->mi_stride * (cm->mi_rows + 1) * sizeof(*cm->mip));
473 462
474 vp9_zero(cm->ref_frame_sign_bias); 463 vp9_zero(cm->ref_frame_sign_bias);
475 464
476 cm->frame_context_idx = 0; 465 cm->frame_context_idx = 0;
477 } 466 }
OLDNEW
« no previous file with comments | « no previous file | source/libvpx/vp9/common/vp9_entropymv.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698