Move the av1_indices_from_tree() function from av1/encoder/treewriter.c to aom_dsp/prob.c so that it can be used by both the encoder and the decoder. Change-Id: Ie43c599f425c3503b1ff93f0c77b5033a05b1bb4
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
 | 
						|
 *
 | 
						|
 * This source code is subject to the terms of the BSD 2 Clause License and
 | 
						|
 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
 | 
						|
 * was not distributed with this source code in the LICENSE file, you can
 | 
						|
 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
 | 
						|
 * Media Patent License 1.0 was not distributed with this source code in the
 | 
						|
 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
 | 
						|
 */
 | 
						|
 | 
						|
#include "av1/encoder/treewriter.h"
 | 
						|
 | 
						|
static void tree2tok(struct av1_token *tokens, const aom_tree_index *tree,
 | 
						|
                     int i, int v, int l) {
 | 
						|
  v += v;
 | 
						|
  ++l;
 | 
						|
 | 
						|
  do {
 | 
						|
    const aom_tree_index j = tree[i++];
 | 
						|
    if (j <= 0) {
 | 
						|
      tokens[-j].value = v;
 | 
						|
      tokens[-j].len = l;
 | 
						|
    } else {
 | 
						|
      tree2tok(tokens, tree, j, v, l);
 | 
						|
    }
 | 
						|
  } while (++v & 1);
 | 
						|
}
 | 
						|
 | 
						|
void av1_tokens_from_tree(struct av1_token *tokens,
 | 
						|
                          const aom_tree_index *tree) {
 | 
						|
  tree2tok(tokens, tree, 0, 0, 0);
 | 
						|
}
 | 
						|
 | 
						|
static unsigned int convert_distribution(unsigned int i, aom_tree tree,
 | 
						|
                                         unsigned int branch_ct[][2],
 | 
						|
                                         const unsigned int num_events[]) {
 | 
						|
  unsigned int left, right;
 | 
						|
 | 
						|
  if (tree[i] <= 0)
 | 
						|
    left = num_events[-tree[i]];
 | 
						|
  else
 | 
						|
    left = convert_distribution(tree[i], tree, branch_ct, num_events);
 | 
						|
 | 
						|
  if (tree[i + 1] <= 0)
 | 
						|
    right = num_events[-tree[i + 1]];
 | 
						|
  else
 | 
						|
    right = convert_distribution(tree[i + 1], tree, branch_ct, num_events);
 | 
						|
 | 
						|
  branch_ct[i >> 1][0] = left;
 | 
						|
  branch_ct[i >> 1][1] = right;
 | 
						|
  return left + right;
 | 
						|
}
 | 
						|
 | 
						|
void av1_tree_probs_from_distribution(aom_tree tree,
 | 
						|
                                      unsigned int branch_ct[/* n-1 */][2],
 | 
						|
                                      const unsigned int num_events[/* n */]) {
 | 
						|
  convert_distribution(0, tree, branch_ct, num_events);
 | 
						|
}
 |