1ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang/*
2ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang *  Copyright (c) 2013 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
115ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang#ifndef VP9_DECODER_VP9_READ_BIT_BUFFER_H_
125ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang#define VP9_DECODER_VP9_READ_BIT_BUFFER_H_
13ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
14ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include <limits.h>
15ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
16ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "vpx/vpx_integer.h"
17ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
18b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus
19b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianextern "C" {
20b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif
21b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian
22b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramaniantypedef void (*vp9_rb_error_handler)(void *data);
23ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
24ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangstruct vp9_read_bit_buffer {
25ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  const uint8_t *bit_buffer;
26ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  const uint8_t *bit_buffer_end;
27ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  size_t bit_offset;
28ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
29ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  void *error_handler_data;
30ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  vp9_rb_error_handler error_handler;
31ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang};
32ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
33b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramaniansize_t vp9_rb_bytes_read(struct vp9_read_bit_buffer *rb);
34b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian
35b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianint vp9_rb_read_bit(struct vp9_read_bit_buffer *rb);
36b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian
37b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianint vp9_rb_read_literal(struct vp9_read_bit_buffer *rb, int bits);
38b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian
39b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianint vp9_rb_read_signed_literal(struct vp9_read_bit_buffer *rb, int bits);
40b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian
41b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus
42b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian}  // extern "C"
43b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif
4491037db265ecdd914a26e056cf69207b4f50924ehkuang
455ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang#endif  // VP9_DECODER_VP9_READ_BIT_BUFFER_H_
46