~ubuntu-branches/ubuntu/vivid/gstreamer-vaapi/vivid

« back to all changes in this revision

Viewing changes to ext/libvpx/upstream/vp9/decoder/vp9_read_bit_buffer.h

  • Committer: Package Import Robot
  • Author(s): Vincent Cheng
  • Date: 2014-08-06 23:56:00 UTC
  • mfrom: (0.1.4 sid) (1.1.3)
  • Revision ID: package-import@ubuntu.com-20140806235600-fg1kcmiu67k315q5
Tags: 0.5.9-2
* Remove spurious build-deps: libva-drm1, libavcodec-dev. (Closes: #757283)
* Drop Build-Depends-Indep and build docs unconditionally on all archs.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *  Copyright (c) 2013 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_DECODER_VP9_READ_BIT_BUFFER_H_
 
12
#define VP9_DECODER_VP9_READ_BIT_BUFFER_H_
 
13
 
 
14
#include <limits.h>
 
15
 
 
16
#include "vpx/vpx_integer.h"
 
17
 
 
18
typedef void (*vp9_rb_error_handler)(void *data, size_t bit_offset);
 
19
 
 
20
struct vp9_read_bit_buffer {
 
21
  const uint8_t *bit_buffer;
 
22
  const uint8_t *bit_buffer_end;
 
23
  size_t bit_offset;
 
24
 
 
25
  void *error_handler_data;
 
26
  vp9_rb_error_handler error_handler;
 
27
};
 
28
 
 
29
static size_t vp9_rb_bytes_read(struct vp9_read_bit_buffer *rb) {
 
30
  return rb->bit_offset / CHAR_BIT + (rb->bit_offset % CHAR_BIT > 0);
 
31
}
 
32
 
 
33
static int vp9_rb_read_bit(struct vp9_read_bit_buffer *rb) {
 
34
  const size_t off = rb->bit_offset;
 
35
  const size_t p = off / CHAR_BIT;
 
36
  const int q = CHAR_BIT - 1 - (int)off % CHAR_BIT;
 
37
  if (rb->bit_buffer + p >= rb->bit_buffer_end) {
 
38
    rb->error_handler(rb->error_handler_data, rb->bit_offset);
 
39
    return 0;
 
40
  } else {
 
41
    const int bit = (rb->bit_buffer[p] & (1 << q)) >> q;
 
42
    rb->bit_offset = off + 1;
 
43
    return bit;
 
44
  }
 
45
}
 
46
 
 
47
static int vp9_rb_read_literal(struct vp9_read_bit_buffer *rb, int bits) {
 
48
  int value = 0, bit;
 
49
  for (bit = bits - 1; bit >= 0; bit--)
 
50
    value |= vp9_rb_read_bit(rb) << bit;
 
51
  return value;
 
52
}
 
53
 
 
54
static int vp9_rb_read_signed_literal(struct vp9_read_bit_buffer *rb,
 
55
                                      int bits) {
 
56
  const int value = vp9_rb_read_literal(rb, bits);
 
57
  return vp9_rb_read_bit(rb) ? -value : value;
 
58
}
 
59
 
 
60
#endif  // VP9_DECODER_VP9_READ_BIT_BUFFER_H_