Mercurial > libavcodec.hg
diff common.h @ 20:907b67420d84 libavcodec
inlineing common case of get_bits() -> gives 2speedup. more optim coming soon...
author | arpi_esp |
---|---|
date | Fri, 03 Aug 2001 23:09:15 +0000 |
parents | f439e6867cac |
children | 20e680e7a490 |
line wrap: on
line diff
--- a/common.h Fri Aug 03 18:33:03 2001 +0000 +++ b/common.h Fri Aug 03 23:09:15 2001 +0000 @@ -25,9 +25,9 @@ typedef void (*WriteDataFunc)(void *, UINT8 *, int); typedef struct PutBitContext { - UINT8 *buf, *buf_ptr, *buf_end; + UINT32 bit_buf; int bit_cnt; - UINT32 bit_buf; + UINT8 *buf, *buf_ptr, *buf_end; long long data_out_size; /* in bytes */ void *opaque; WriteDataFunc write_data; @@ -49,9 +49,9 @@ /* bit input */ typedef struct GetBitContext { - UINT8 *buf, *buf_ptr, *buf_end; + UINT32 bit_buf; int bit_cnt; - UINT32 bit_buf; + UINT8 *buf, *buf_ptr, *buf_end; } GetBitContext; typedef struct VLC { @@ -64,7 +64,22 @@ void init_get_bits(GetBitContext *s, UINT8 *buffer, int buffer_size); -unsigned int get_bits(GetBitContext *s, int n); +unsigned int get_bits_long(GetBitContext *s, int n); + +static inline unsigned int get_bits(GetBitContext *s, int n){ + if(s->bit_cnt>=n){ + /* most common case here */ + unsigned int val = s->bit_buf >> (32 - n); + s->bit_buf <<= n; + s->bit_cnt -= n; +#ifdef STATS + st_bit_counts[st_current_index] += n; +#endif + return val; + } + return get_bits_long(s,n); +} + void align_get_bits(GetBitContext *s); int init_vlc(VLC *vlc, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size,