| Index: source/libvpx/vp9/common/vp9_treecoder.h
 | 
| ===================================================================
 | 
| --- source/libvpx/vp9/common/vp9_treecoder.h	(revision 240950)
 | 
| +++ source/libvpx/vp9/common/vp9_treecoder.h	(working copy)
 | 
| @@ -34,27 +34,11 @@
 | 
|  
 | 
|  typedef const vp9_tree_index vp9_tree[];
 | 
|  
 | 
| -struct vp9_token {
 | 
| -  int value;
 | 
| -  int len;
 | 
| -};
 | 
| -
 | 
| -/* Construct encoding array from tree. */
 | 
| -
 | 
| -void vp9_tokens_from_tree(struct vp9_token*, vp9_tree);
 | 
| -void vp9_tokens_from_tree_offset(struct vp9_token*, vp9_tree, int offset);
 | 
| -
 | 
|  /* Convert array of token occurrence counts into a table of probabilities
 | 
|     for the associated binary encoding tree.  Also writes count of branches
 | 
|     taken for each node on the tree; this facilitiates decisions as to
 | 
|     probability updates. */
 | 
|  
 | 
| -void vp9_tree_probs_from_distribution(vp9_tree tree,
 | 
| -                                      vp9_prob probs[ /* n - 1 */ ],
 | 
| -                                      unsigned int branch_ct[ /* n - 1 */ ][2],
 | 
| -                                      const unsigned int num_events[ /* n */ ],
 | 
| -                                      unsigned int tok0_offset);
 | 
| -
 | 
|  static INLINE vp9_prob clip_prob(int p) {
 | 
|    return (p > 255) ? 255u : (p < 1) ? 1u : p;
 | 
|  }
 | 
| @@ -81,22 +65,47 @@
 | 
|    return ROUND_POWER_OF_TWO(prob1 * (256 - factor) + prob2 * factor, 8);
 | 
|  }
 | 
|  
 | 
| -static INLINE vp9_prob merge_probs(vp9_prob pre_prob, vp9_prob prob,
 | 
| +static INLINE vp9_prob merge_probs(vp9_prob pre_prob,
 | 
|                                     const unsigned int ct[2],
 | 
|                                     unsigned int count_sat,
 | 
|                                     unsigned int max_update_factor) {
 | 
| +  const vp9_prob prob = get_binary_prob(ct[0], ct[1]);
 | 
|    const unsigned int count = MIN(ct[0] + ct[1], count_sat);
 | 
|    const unsigned int factor = max_update_factor * count / count_sat;
 | 
|    return weighted_prob(pre_prob, prob, factor);
 | 
|  }
 | 
|  
 | 
| -static INLINE vp9_prob merge_probs2(vp9_prob pre_prob,
 | 
| -                                   const unsigned int ct[2],
 | 
| -                                   unsigned int count_sat,
 | 
| -                                   unsigned int max_update_factor) {
 | 
| -  return merge_probs(pre_prob, get_binary_prob(ct[0], ct[1]), ct, count_sat,
 | 
| -                     max_update_factor);
 | 
| +static unsigned int tree_merge_probs_impl(unsigned int i,
 | 
| +                                          const vp9_tree_index *tree,
 | 
| +                                          const vp9_prob *pre_probs,
 | 
| +                                          const unsigned int *counts,
 | 
| +                                          unsigned int count_sat,
 | 
| +                                          unsigned int max_update_factor,
 | 
| +                                          vp9_prob *probs) {
 | 
| +  const int l = tree[i];
 | 
| +  const unsigned int left_count = (l <= 0)
 | 
| +                 ? counts[-l]
 | 
| +                 : tree_merge_probs_impl(l, tree, pre_probs, counts,
 | 
| +                                         count_sat, max_update_factor, probs);
 | 
| +  const int r = tree[i + 1];
 | 
| +  const unsigned int right_count = (r <= 0)
 | 
| +                 ? counts[-r]
 | 
| +                 : tree_merge_probs_impl(r, tree, pre_probs, counts,
 | 
| +                                         count_sat, max_update_factor, probs);
 | 
| +  const unsigned int ct[2] = { left_count, right_count };
 | 
| +  probs[i >> 1] = merge_probs(pre_probs[i >> 1], ct,
 | 
| +                              count_sat, max_update_factor);
 | 
| +  return left_count + right_count;
 | 
|  }
 | 
|  
 | 
| +static void tree_merge_probs(const vp9_tree_index *tree,
 | 
| +                             const vp9_prob *pre_probs,
 | 
| +                             const unsigned int *counts,
 | 
| +                             unsigned int count_sat,
 | 
| +                             unsigned int max_update_factor, vp9_prob *probs) {
 | 
| +  tree_merge_probs_impl(0, tree, pre_probs, counts,
 | 
| +                        count_sat, max_update_factor, probs);
 | 
| +}
 | 
|  
 | 
| +
 | 
|  #endif  // VP9_COMMON_VP9_TREECODER_H_
 | 
| 
 |