1ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang/* 2ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * 4ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * Use of this source code is governed by a BSD-style license 5ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * that can be found in the LICENSE file in the root of the source 6ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * tree. An additional intellectual property rights grant can be found 7ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * in the file PATENTS. All contributing project authors may 8ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang * be found in the AUTHORS file in the root of the source tree. 9ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang */ 10ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 11ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#ifndef VP9_ENCODER_VP9_TREEWRITER_H_ 12ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#define VP9_ENCODER_VP9_TREEWRITER_H_ 13ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 14b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#include "vp9/encoder/vp9_writer.h" 15ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 16b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus 17b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianextern "C" { 18b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif 19ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 20b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianvoid vp9_tree_probs_from_distribution(vp9_tree tree, 21b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian unsigned int branch_ct[ /* n - 1 */ ][2], 22b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const unsigned int num_events[ /* n */ ]); 23ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 24b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianstruct vp9_token { 25b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int value; 26b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int len; 27b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian}; 28ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 29b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianvoid vp9_tokens_from_tree(struct vp9_token*, const vp9_tree_index *); 30ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 31b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianstatic INLINE void vp9_write_tree(vp9_writer *w, const vp9_tree_index *tree, 32b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const vp9_prob *probs, int bits, int len, 33b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian vp9_tree_index i) { 34ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang do { 35ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang const int bit = (bits >> --len) & 1; 36ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang vp9_write(w, bit, probs[i >> 1]); 37ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang i = tree[i + bit]; 38ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang } while (len); 39ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 40ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 41b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianstatic INLINE void vp9_write_token(vp9_writer *w, const vp9_tree_index *tree, 42b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const vp9_prob *probs, 43b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian const struct vp9_token *token) { 44b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian vp9_write_tree(w, tree, probs, token->value, token->len, 0); 45ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 46ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 47b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus 48b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian} // extern "C" 49b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif 50ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 51ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#endif // VP9_ENCODER_VP9_TREEWRITER_H_ 52