1/* 2 * Copyright (c) 2010 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 11#ifndef VP9_ENCODER_VP9_TREEWRITER_H_ 12#define VP9_ENCODER_VP9_TREEWRITER_H_ 13 14#include "vpx_dsp/bitwriter.h" 15 16#ifdef __cplusplus 17extern "C" { 18#endif 19 20void vp9_tree_probs_from_distribution(vpx_tree tree, 21 unsigned int branch_ct[/* n - 1 */][2], 22 const unsigned int num_events[/* n */]); 23 24struct vp9_token { 25 int value; 26 int len; 27}; 28 29void vp9_tokens_from_tree(struct vp9_token *, const vpx_tree_index *); 30 31static INLINE void vp9_write_tree(vpx_writer *w, const vpx_tree_index *tree, 32 const vpx_prob *probs, int bits, int len, 33 vpx_tree_index i) { 34 do { 35 const int bit = (bits >> --len) & 1; 36 vpx_write(w, bit, probs[i >> 1]); 37 i = tree[i + bit]; 38 } while (len); 39} 40 41static INLINE void vp9_write_token(vpx_writer *w, const vpx_tree_index *tree, 42 const vpx_prob *probs, 43 const struct vp9_token *token) { 44 vp9_write_tree(w, tree, probs, token->value, token->len, 0); 45} 46 47#ifdef __cplusplus 48} // extern "C" 49#endif 50 51#endif // VP9_ENCODER_VP9_TREEWRITER_H_ 52