diff options
author | hkuang <hkuang@google.com> | 2014-12-12 13:54:40 -0800 |
---|---|---|
committer | hkuang <hkuang@google.com> | 2014-12-12 14:38:12 -0800 |
commit | 3cecce916b7a7bacbf6e19fdcec34bd9834a0923 (patch) | |
tree | 850db6b0fd84aecff1cc488b86510f751febeaa6 /vp9/decoder | |
parent | f925e5ce0fa2981317f76f0960706ae99694ed10 (diff) | |
download | libvpx-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.c | 16 |
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; } } |