• Home
  • Raw
  • Download

Lines Matching +full:- +full:ac

9  *  http://www.apache.org/licenses/LICENSE-2.0
23 /* ----------------------------------------------------------------------------
25 * -------------------------------------------------------------------------- */
32 * ac Arithmetic coder
33 * return 1 + log2(ac->range)
35 static int ac_get_range_bits(const struct lc3_bits_ac *ac) in ac_get_range_bits() argument
39 for (unsigned r = ac->range; r; r >>= 1, nbits++); in ac_get_range_bits()
46 * ac Arithmetic coder
49 static int ac_get_pending_bits(const struct lc3_bits_ac *ac) in ac_get_pending_bits() argument
51 return 26 - ac_get_range_bits(ac) + in ac_get_pending_bits()
52 ((ac->cache >= 0) + ac->carry_count) * 8; in ac_get_pending_bits()
62 const struct lc3_bits_buffer *buffer = &bits->buffer; in get_bits_left()
63 const struct lc3_bits_accu *accu = &bits->accu; in get_bits_left()
64 const struct lc3_bits_ac *ac = &bits->ac; in get_bits_left() local
66 uintptr_t end = (uintptr_t)buffer->p_bw + in get_bits_left()
67 (bits->mode == LC3_BITS_MODE_READ ? LC3_ACCU_BITS/8 : 0); in get_bits_left()
69 uintptr_t start = (uintptr_t)buffer->p_fw - in get_bits_left()
70 (bits->mode == LC3_BITS_MODE_READ ? LC3_AC_BITS/8 : 0); in get_bits_left()
72 int n = end > start ? (int)(end - start) : -(int)(start - end); in get_bits_left()
74 return 8 * n - (accu->n + accu->nover + ac_get_pending_bits(ac)); in get_bits_left()
88 .ac = { in lc3_setup_bits()
90 .cache = -1 in lc3_setup_bits()
99 struct lc3_bits_ac *ac = &bits->ac; in lc3_setup_bits() local
100 struct lc3_bits_accu *accu = &bits->accu; in lc3_setup_bits()
101 struct lc3_bits_buffer *buffer = &bits->buffer; in lc3_setup_bits()
103 ac->low = ac_get(buffer) << 16; in lc3_setup_bits()
104 ac->low |= ac_get(buffer) << 8; in lc3_setup_bits()
105 ac->low |= ac_get(buffer); in lc3_setup_bits()
124 const struct lc3_bits_ac *ac = &bits->ac; in lc3_check_bits() local
126 return -(get_bits_left(bits) < 0 || ac->error); in lc3_check_bits()
130 /* ----------------------------------------------------------------------------
132 * -------------------------------------------------------------------------- */
142 int nbytes = LC3_MIN(accu->n >> 3, in accu_flush()
143 LC3_MAX(buffer->p_bw - buffer->p_fw, 0)); in accu_flush()
145 accu->n -= 8 * nbytes; in accu_flush()
147 for ( ; nbytes; accu->v >>= 8, nbytes--) in accu_flush()
148 *(--buffer->p_bw) = accu->v & 0xff; in accu_flush()
150 if (accu->n >= 8) in accu_flush()
151 accu->n = 0; in accu_flush()
161 if (buffer->p_fw < buffer->end) in ac_put()
162 *(buffer->p_fw++) = byte; in ac_put()
167 * ac Arithmetic coder
171 struct lc3_bits_ac *ac, struct lc3_bits_buffer *buffer) in ac_shift() argument
173 if (ac->low < 0xff0000 || ac->carry) in ac_shift()
175 if (ac->cache >= 0) in ac_shift()
176 ac_put(buffer, ac->cache + ac->carry); in ac_shift()
178 for ( ; ac->carry_count > 0; ac->carry_count--) in ac_shift()
179 ac_put(buffer, ac->carry ? 0x00 : 0xff); in ac_shift()
181 ac->cache = ac->low >> 16; in ac_shift()
182 ac->carry = 0; in ac_shift()
185 ac->carry_count++; in ac_shift()
187 ac->low = (ac->low << 8) & 0xffffff; in ac_shift()
192 * ac Arithmetic coder
196 static void ac_terminate(struct lc3_bits_ac *ac, in ac_terminate() argument
199 int nbits = 25 - ac_get_range_bits(ac); in ac_terminate()
201 unsigned val = ac->low + mask; in ac_terminate()
202 unsigned high = ac->low + ac->range; in ac_terminate()
215 val = ((ac->low + mask) & 0xffffff) & ~mask; in ac_terminate()
218 ac->carry |= val < ac->low; in ac_terminate()
221 ac->low = val; in ac_terminate()
223 for (; nbits > 8; nbits -= 8) in ac_terminate()
224 ac_shift(ac, buffer); in ac_terminate()
225 ac_shift(ac, buffer); in ac_terminate()
227 int end_val = ac->cache >> (8 - nbits); in ac_terminate()
229 if (ac->carry_count) { in ac_terminate()
230 ac_put(buffer, ac->cache); in ac_terminate()
231 for ( ; ac->carry_count > 1; ac->carry_count--) in ac_terminate()
237 if (buffer->p_fw < buffer->end) { in ac_terminate()
238 *buffer->p_fw &= 0xff >> nbits; in ac_terminate()
239 *buffer->p_fw |= end_val << (8 - nbits); in ac_terminate()
248 struct lc3_bits_ac *ac = &bits->ac; in lc3_flush_bits() local
249 struct lc3_bits_accu *accu = &bits->accu; in lc3_flush_bits()
250 struct lc3_bits_buffer *buffer = &bits->buffer; in lc3_flush_bits()
252 int nleft = buffer->p_bw - buffer->p_fw; in lc3_flush_bits()
253 for (int n = 8 * nleft - accu->n; n > 0; n -= 32) in lc3_flush_bits()
258 ac_terminate(ac, buffer); in lc3_flush_bits()
267 struct lc3_bits_accu *accu = &bits->accu; in lc3_put_bits_generic()
269 /* --- Fulfill accumulator and flush -- */ in lc3_put_bits_generic()
271 int n1 = LC3_MIN(LC3_ACCU_BITS - accu->n, n); in lc3_put_bits_generic()
273 accu->v |= v << accu->n; in lc3_put_bits_generic()
274 accu->n = LC3_ACCU_BITS; in lc3_put_bits_generic()
277 accu_flush(accu, &bits->buffer); in lc3_put_bits_generic()
279 /* --- Accumulate remaining bits -- */ in lc3_put_bits_generic()
281 accu->v = v >> n1; in lc3_put_bits_generic()
282 accu->n = n - n1; in lc3_put_bits_generic()
290 struct lc3_bits_ac *ac = &bits->ac; in lc3_ac_write_renorm() local
292 for ( ; ac->range < 0x10000; ac->range <<= 8) in lc3_ac_write_renorm()
293 ac_shift(ac, &bits->buffer); in lc3_ac_write_renorm()
297 /* ----------------------------------------------------------------------------
299 * -------------------------------------------------------------------------- */
308 return buffer->p_fw < buffer->end ? *(buffer->p_fw++) : 0; in ac_get()
319 int nbytes = LC3_MIN(accu->n >> 3, buffer->p_bw - buffer->start); in accu_load()
321 accu->n -= 8 * nbytes; in accu_load()
323 for ( ; nbytes; nbytes--) { in accu_load()
324 accu->v >>= 8; in accu_load()
325 accu->v |= (unsigned)*(--buffer->p_bw) << (LC3_ACCU_BITS - 8); in accu_load()
328 if (accu->n >= 8) { in accu_load()
329 accu->nover = LC3_MIN(accu->nover + accu->n, LC3_ACCU_BITS); in accu_load()
330 accu->v >>= accu->n; in accu_load()
331 accu->n = 0; in accu_load()
341 struct lc3_bits_accu *accu = &bits->accu; in lc3_get_bits_generic()
342 struct lc3_bits_buffer *buffer = &bits->buffer; in lc3_get_bits_generic()
344 /* --- Fulfill accumulator and read -- */ in lc3_get_bits_generic()
348 int n1 = LC3_MIN(LC3_ACCU_BITS - accu->n, n); in lc3_get_bits_generic()
349 unsigned v = (accu->v >> accu->n) & ((1u << n1) - 1); in lc3_get_bits_generic()
350 accu->n += n1; in lc3_get_bits_generic()
352 /* --- Second round --- */ in lc3_get_bits_generic()
354 int n2 = n - n1; in lc3_get_bits_generic()
359 v |= ((accu->v >> accu->n) & ((1u << n2) - 1)) << n1; in lc3_get_bits_generic()
360 accu->n += n2; in lc3_get_bits_generic()
371 struct lc3_bits_ac *ac = &bits->ac; in lc3_ac_read_renorm() local
373 for ( ; ac->range < 0x10000; ac->range <<= 8) in lc3_ac_read_renorm()
374 ac->low = ((ac->low << 8) | ac_get(&bits->buffer)) & 0xffffff; in lc3_ac_read_renorm()