39 size_t (*pf_byte_forward)(
bs_t *, size_t);
40 size_t (*pf_byte_pos)(
const bs_t *);
41 size_t (*pf_byte_remain)(
const bs_t *);
68 if( (
size_t) (s->
p_end - s->
p) < i_count )
102 static inline void bs_init(
bs_t *s,
const void *p_data,
size_t i_data )
114 bs_init( s, (
const void *) p_data, i_data );
128 return s->
i_left > 0 ? 0 : 1;
146 static inline void bs_skip(
bs_t *s,
size_t i_count )
160 i_count = i_count % 8;
164 else s->
i_left -= i_count;
167 static inline uint32_t
bs_read(
bs_t *s, uint8_t i_count )
169 static const uint32_t i_mask[33] =
171 0x01, 0x03, 0x07, 0x0f,
172 0x1f, 0x3f, 0x7f, 0xff,
173 0x1ff, 0x3ff, 0x7ff, 0xfff,
174 0x1fff, 0x3fff, 0x7fff, 0xffff,
175 0x1ffff, 0x3ffff, 0x7ffff, 0xfffff,
176 0x1fffff, 0x3fffff, 0x7fffff, 0xffffff,
177 0x1ffffff, 0x3ffffff, 0x7ffffff, 0xfffffff,
178 0x1fffffff,0x3fffffff,0x7fffffff,0xffffffff};
179 uint8_t i_shr, i_drop = 0;
180 uint32_t i_result = 0;
184 i_drop = i_count - 32;
195 i_shr = s->
i_left - i_count;
197 i_result |= ( *s->
p >> i_shr )&i_mask[i_count];
203 i_shr = i_count - s->
i_left;
208 i_result |= (*s->
p&i_mask[s->
i_left]) << i_shr;
225 return ( *s->
p >> s->
i_left )&0x01;
228 static inline void bs_write(
bs_t *s, uint8_t i_count, uint32_t i_bits )
240 if( ( i_bits >> i_count )&0x01 )
242 *s->
p |= 1 << ( s->
i_left - 1 );
246 *s->
p &= ~( 1 << ( s->
i_left - 1 ) );
254 return s->
i_left % 8 == 0;
269 #define bs_align_0( s ) bs_write_align( s, 0 ) 270 #define bs_align_1( s ) bs_write_align( s, 1 ) 280 return (1U << i) - 1 +
bs_read( bs, i );
288 return (val & 0x01) ? (int_fast32_t)((val + 1) / 2)
289 : -(int_fast32_t)(val / 2);
bool b_read_only
Definition: vlc_bits.h:52
static void bs_align(bs_t *s)
Definition: vlc_bits.h:258
static int_fast32_t bs_read_se(bs_t *s)
Definition: vlc_bits.h:285
uint8_t i_left
Definition: vlc_bits.h:51
static void bs_write(bs_t *s, uint8_t i_count, uint32_t i_bits)
Definition: vlc_bits.h:229
uint8_t * p_end
Definition: vlc_bits.h:49
size_t(* pf_byte_remain)(const bs_t *)
Definition: vlc_bits.h:42
This file is a collection of common definitions and types.
Definition: vlc_bits.h:45
static uint32_t bs_read1(bs_t *s)
Definition: vlc_bits.h:221
bs_byte_callbacks_t cb
Definition: vlc_bits.h:54
static uint32_t bs_read(bs_t *s, uint8_t i_count)
Definition: vlc_bits.h:168
static size_t bs_impl_bytes_remain(const bs_t *s)
Definition: vlc_bits.h:75
Definition: vlc_bits.h:37
static void bs_skip(bs_t *s, size_t i_count)
Definition: vlc_bits.h:147
static bool bs_eof(bs_t *s)
Definition: vlc_bits.h:132
static void bs_write_init(bs_t *s, void *p_data, size_t i_data)
Definition: vlc_bits.h:113
static int bs_refill(bs_t *s)
Definition: vlc_bits.h:119
uint8_t * p
Definition: vlc_bits.h:48
static void bs_write_align(bs_t *s, uint8_t v)
Definition: vlc_bits.h:264
uint8_t * p_start
Definition: vlc_bits.h:47
static void bs_init_custom(bs_t *s, const void *p_data, size_t i_data, const bs_byte_callbacks_t *cb, void *priv)
Definition: vlc_bits.h:91
static size_t bs_impl_bytes_forward(bs_t *s, size_t i_count)
Definition: vlc_bits.h:58
static size_t bs_impl_bytes_pos(const bs_t *s)
Definition: vlc_bits.h:83
struct bs_s bs_t
Definition: vlc_bits.h:35
static size_t bs_remain(const bs_t *s)
Definition: vlc_bits.h:142
static size_t bs_pos(const bs_t *s)
Definition: vlc_bits.h:137
static bool bs_aligned(bs_t *s)
Definition: vlc_bits.h:253
static void bs_init(bs_t *s, const void *p_data, size_t i_data)
Definition: vlc_bits.h:103
void * p_priv
Definition: vlc_bits.h:55
static uint_fast32_t bs_read_ue(bs_t *bs)
Definition: vlc_bits.h:274
size_t(* pf_byte_pos)(const bs_t *)
Definition: vlc_bits.h:41
size_t(* pf_byte_forward)(bs_t *, size_t)
Definition: vlc_bits.h:40