summaryrefslogtreecommitdiff
path: root/vp9/decoder
diff options
context:
space:
mode:
authorhkuang <hkuang@google.com>2014-12-12 13:54:40 -0800
committerhkuang <hkuang@google.com>2014-12-12 14:38:12 -0800
commit3cecce916b7a7bacbf6e19fdcec34bd9834a0923 (patch)
tree850db6b0fd84aecff1cc488b86510f751febeaa6 /vp9/decoder
parentf925e5ce0fa2981317f76f0960706ae99694ed10 (diff)
downloadlibvpx-3cecce916b7a7bacbf6e19fdcec34bd9834a0923.tar
libvpx-3cecce916b7a7bacbf6e19fdcec34bd9834a0923.tar.gz
libvpx-3cecce916b7a7bacbf6e19fdcec34bd9834a0923.tar.bz2
libvpx-3cecce916b7a7bacbf6e19fdcec34bd9834a0923.zip
Optimize bit_read_buffer.
Change-Id: Iee43c34909deec9787b29c1c33672213b9f049df
Diffstat (limited to 'vp9/decoder')
-rw-r--r--vp9/decoder/vp9_read_bit_buffer.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/vp9/decoder/vp9_read_bit_buffer.c b/vp9/decoder/vp9_read_bit_buffer.c
index 3eef72844..c3b38a9c7 100644
--- a/vp9/decoder/vp9_read_bit_buffer.c
+++ b/vp9/decoder/vp9_read_bit_buffer.c
@@ -10,20 +10,20 @@
#include "vp9/decoder/vp9_read_bit_buffer.h"
size_t vp9_rb_bytes_read(struct vp9_read_bit_buffer *rb) {
- return (rb->bit_offset + CHAR_BIT - 1) / CHAR_BIT;
+ return (rb->bit_offset + 7) >> 3;
}
int vp9_rb_read_bit(struct vp9_read_bit_buffer *rb) {
const size_t off = rb->bit_offset;
- const size_t p = off / CHAR_BIT;
- const int q = CHAR_BIT - 1 - (int)off % CHAR_BIT;
- if (rb->bit_buffer + p >= rb->bit_buffer_end) {
- rb->error_handler(rb->error_handler_data);
- return 0;
- } else {
- const int bit = (rb->bit_buffer[p] & (1 << q)) >> q;
+ const size_t p = off >> 3;
+ const int q = 7 - (int)(off & 0x7);
+ if (rb->bit_buffer + p < rb->bit_buffer_end) {
+ const int bit = (rb->bit_buffer[p] >> q) & 1;
rb->bit_offset = off + 1;
return bit;
+ } else {
+ rb->error_handler(rb->error_handler_data);
+ return 0;
}
}