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 147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#include "vpx_dsp/bitwriter.h" 15ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 16b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus 17b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianextern "C" { 18b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif 19ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vp9_tree_probs_from_distribution(vpx_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 297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vp9_tokens_from_tree(struct vp9_token*, const vpx_tree_index *); 30ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void vp9_write_tree(vpx_writer *w, const vpx_tree_index *tree, 327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const vpx_prob *probs, int bits, int len, 337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_tree_index i) { 34ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang do { 35ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang const int bit = (bits >> --len) & 1; 367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_write(w, bit, probs[i >> 1]); 37ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang i = tree[i + bit]; 38ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang } while (len); 39ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang} 40ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang 417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void vp9_write_token(vpx_writer *w, const vpx_tree_index *tree, 427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const vpx_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