Lines Matching full:vlc

87 vl_vlc_next_input(struct vl_vlc *vlc)  in vl_vlc_next_input()  argument
89 unsigned len = vlc->sizes[0]; in vl_vlc_next_input()
91 assert(vlc); in vl_vlc_next_input()
92 assert(vlc->bytes_left); in vl_vlc_next_input()
94 if (len < vlc->bytes_left) in vl_vlc_next_input()
95 vlc->bytes_left -= len; in vl_vlc_next_input()
97 len = vlc->bytes_left; in vl_vlc_next_input()
98 vlc->bytes_left = 0; in vl_vlc_next_input()
101 vlc->data = (const uint8_t *) vlc->inputs[0]; in vl_vlc_next_input()
102 vlc->end = vlc->data + len; in vl_vlc_next_input()
104 ++vlc->inputs; in vl_vlc_next_input()
105 ++vlc->sizes; in vl_vlc_next_input()
112 vl_vlc_align_data_ptr(struct vl_vlc *vlc) in vl_vlc_align_data_ptr() argument
115 while (vlc->data != vlc->end && ((uintptr_t)vlc->data) & 3) { in vl_vlc_align_data_ptr()
116 vlc->buffer |= (uint64_t)*vlc->data << (24 + vlc->invalid_bits); in vl_vlc_align_data_ptr()
117 ++vlc->data; in vl_vlc_align_data_ptr()
118 vlc->invalid_bits -= 8; in vl_vlc_align_data_ptr()
126 vl_vlc_fillbits(struct vl_vlc *vlc) in vl_vlc_fillbits() argument
128 assert(vlc); in vl_vlc_fillbits()
131 while (vlc->invalid_bits > 0) { in vl_vlc_fillbits()
132 unsigned bytes_left = vlc->end - vlc->data; in vl_vlc_fillbits()
137 if (vlc->bytes_left) { in vl_vlc_fillbits()
139 vl_vlc_next_input(vlc); in vl_vlc_fillbits()
140 vl_vlc_align_data_ptr(vlc); in vl_vlc_fillbits()
148 uint64_t value = *(const uint32_t*)vlc->data; in vl_vlc_fillbits()
154 vlc->buffer |= value << vlc->invalid_bits; in vl_vlc_fillbits()
155 vlc->data += 4; in vl_vlc_fillbits()
156 vlc->invalid_bits -= 32; in vl_vlc_fillbits()
161 } else while (vlc->data < vlc->end) { in vl_vlc_fillbits()
164 vlc->buffer |= (uint64_t)*vlc->data << (24 + vlc->invalid_bits); in vl_vlc_fillbits()
165 ++vlc->data; in vl_vlc_fillbits()
166 vlc->invalid_bits -= 8; in vl_vlc_fillbits()
172 * initialize vlc structure and start reading from first input buffer
175 vl_vlc_init(struct vl_vlc *vlc, unsigned num_inputs, in vl_vlc_init() argument
180 assert(vlc); in vl_vlc_init()
183 vlc->buffer = 0; in vl_vlc_init()
184 vlc->invalid_bits = 32; in vl_vlc_init()
185 vlc->inputs = inputs; in vl_vlc_init()
186 vlc->sizes = sizes; in vl_vlc_init()
187 vlc->bytes_left = 0; in vl_vlc_init()
188 vlc->data = NULL; in vl_vlc_init()
189 vlc->end = NULL; in vl_vlc_init()
192 vlc->bytes_left += sizes[i]; in vl_vlc_init()
194 if (vlc->bytes_left) { in vl_vlc_init()
195 vl_vlc_next_input(vlc); in vl_vlc_init()
196 vl_vlc_align_data_ptr(vlc); in vl_vlc_init()
197 vl_vlc_fillbits(vlc); in vl_vlc_init()
205 vl_vlc_valid_bits(struct vl_vlc *vlc) in vl_vlc_valid_bits() argument
207 return 32 - vlc->invalid_bits; in vl_vlc_valid_bits()
214 vl_vlc_bits_left(struct vl_vlc *vlc) in vl_vlc_bits_left() argument
216 signed bytes_left = vlc->end - vlc->data; in vl_vlc_bits_left()
217 bytes_left += vlc->bytes_left; in vl_vlc_bits_left()
218 return bytes_left * 8 + vl_vlc_valid_bits(vlc); in vl_vlc_bits_left()
225 vl_vlc_peekbits(struct vl_vlc *vlc, unsigned num_bits) in vl_vlc_peekbits() argument
227 assert(vl_vlc_valid_bits(vlc) >= num_bits || vlc->data >= vlc->end); in vl_vlc_peekbits()
228 return vlc->buffer >> (64 - num_bits); in vl_vlc_peekbits()
235 vl_vlc_eatbits(struct vl_vlc *vlc, unsigned num_bits) in vl_vlc_eatbits() argument
237 assert(vl_vlc_valid_bits(vlc) >= num_bits); in vl_vlc_eatbits()
239 vlc->buffer <<= num_bits; in vl_vlc_eatbits()
240 vlc->invalid_bits += num_bits; in vl_vlc_eatbits()
247 vl_vlc_get_uimsbf(struct vl_vlc *vlc, unsigned num_bits) in vl_vlc_get_uimsbf() argument
251 assert(vl_vlc_valid_bits(vlc) >= num_bits); in vl_vlc_get_uimsbf()
253 value = vlc->buffer >> (64 - num_bits); in vl_vlc_get_uimsbf()
254 vl_vlc_eatbits(vlc, num_bits); in vl_vlc_get_uimsbf()
263 vl_vlc_get_simsbf(struct vl_vlc *vlc, unsigned num_bits) in vl_vlc_get_simsbf() argument
267 assert(vl_vlc_valid_bits(vlc) >= num_bits); in vl_vlc_get_simsbf()
269 value = ((int64_t)vlc->buffer) >> (64 - num_bits); in vl_vlc_get_simsbf()
270 vl_vlc_eatbits(vlc, num_bits); in vl_vlc_get_simsbf()
279 vl_vlc_get_vlclbf(struct vl_vlc *vlc, const struct vl_vlc_entry *tbl, unsigned num_bits) in vl_vlc_get_vlclbf() argument
281 tbl += vl_vlc_peekbits(vlc, num_bits); in vl_vlc_get_vlclbf()
282 vl_vlc_eatbits(vlc, tbl->length); in vl_vlc_get_vlclbf()
290 vl_vlc_search_byte(struct vl_vlc *vlc, unsigned num_bits, uint8_t value) in vl_vlc_search_byte() argument
293 assert((vl_vlc_valid_bits(vlc) % 8) == 0); in vl_vlc_search_byte()
297 while (vl_vlc_valid_bits(vlc) > 0) { in vl_vlc_search_byte()
299 if (vl_vlc_peekbits(vlc, 8) == value) { in vl_vlc_search_byte()
300 vl_vlc_fillbits(vlc); in vl_vlc_search_byte()
304 vl_vlc_eatbits(vlc, 8); in vl_vlc_search_byte()
317 if (vlc->data == vlc->end) { in vl_vlc_search_byte()
318 if (vlc->bytes_left) in vl_vlc_search_byte()
320 vl_vlc_next_input(vlc); in vl_vlc_search_byte()
326 if (*vlc->data == value) { in vl_vlc_search_byte()
327 vl_vlc_align_data_ptr(vlc); in vl_vlc_search_byte()
328 vl_vlc_fillbits(vlc); in vl_vlc_search_byte()
332 ++vlc->data; in vl_vlc_search_byte()
336 vl_vlc_align_data_ptr(vlc); in vl_vlc_search_byte()
347 vl_vlc_removebits(struct vl_vlc *vlc, unsigned pos, unsigned num_bits) in vl_vlc_removebits() argument
351 uint64_t lo = (vlc->buffer & (UINT64_MAX >> (pos + num_bits))) << num_bits; in vl_vlc_removebits()
352 uint64_t hi = (vlc->buffer & (UINT64_MAX << (64 - pos))); in vl_vlc_removebits()
354 uint64_t lo = (vlc->buffer & (~0UL >> (pos + num_bits))) << num_bits; in vl_vlc_removebits()
355 uint64_t hi = (vlc->buffer & (~0UL << (64 - pos))); in vl_vlc_removebits()
357 vlc->buffer = lo | hi; in vl_vlc_removebits()
358 vlc->invalid_bits += num_bits; in vl_vlc_removebits()
365 vl_vlc_limit(struct vl_vlc *vlc, unsigned bits_left) in vl_vlc_limit() argument
367 assert(bits_left <= vl_vlc_bits_left(vlc)); in vl_vlc_limit()
369 vl_vlc_fillbits(vlc); in vl_vlc_limit()
370 if (bits_left < vl_vlc_valid_bits(vlc)) { in vl_vlc_limit()
371 vlc->invalid_bits = 32 - bits_left; in vl_vlc_limit()
372 vlc->buffer &= ~0L << (vlc->invalid_bits + 32); in vl_vlc_limit()
373 vlc->end = vlc->data; in vl_vlc_limit()
374 vlc->bytes_left = 0; in vl_vlc_limit()
376 assert((bits_left - vl_vlc_valid_bits(vlc)) % 8 == 0); in vl_vlc_limit()
377 vlc->bytes_left = (bits_left - vl_vlc_valid_bits(vlc)) / 8; in vl_vlc_limit()
378 if (vlc->bytes_left < (vlc->end - vlc->data)) { in vl_vlc_limit()
379 vlc->end = vlc->data + vlc->bytes_left; in vl_vlc_limit()
380 vlc->bytes_left = 0; in vl_vlc_limit()
382 vlc->bytes_left -= vlc->end - vlc->data; in vl_vlc_limit()