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