prob.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /*
  2. * Copyright (c) 2013 The WebM project authors. All Rights Reserved.
  3. *
  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
  6. * tree. An additional intellectual property rights grant can be found
  7. * in the file PATENTS. All contributing project authors may
  8. * be found in the AUTHORS file in the root of the source tree.
  9. */
  10. #include "./prob.h"
  11. const uint8_t vpx_norm[256] = {
  12. 0, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
  13. 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
  14. 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  15. 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  16. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  17. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  18. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  19. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  20. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  21. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  22. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  23. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  24. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  25. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  26. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  27. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  28. };
  29. static unsigned int tree_merge_probs_impl(unsigned int i,
  30. const vpx_tree_index *tree,
  31. const vpx_prob *pre_probs,
  32. const unsigned int *counts,
  33. vpx_prob *probs) {
  34. const int l = tree[i];
  35. const unsigned int left_count = (l <= 0)
  36. ? counts[-l]
  37. : tree_merge_probs_impl(l, tree, pre_probs, counts, probs);
  38. const int r = tree[i + 1];
  39. const unsigned int right_count = (r <= 0)
  40. ? counts[-r]
  41. : tree_merge_probs_impl(r, tree, pre_probs, counts, probs);
  42. const unsigned int ct[2] = { left_count, right_count };
  43. probs[i >> 1] = mode_mv_merge_probs(pre_probs[i >> 1], ct);
  44. return left_count + right_count;
  45. }
  46. void vpx_tree_merge_probs(const vpx_tree_index *tree, const vpx_prob *pre_probs,
  47. const unsigned int *counts, vpx_prob *probs) {
  48. tree_merge_probs_impl(0, tree, pre_probs, counts, probs);
  49. }