Lines Matching refs:rc

55 rc_reset(lzma_range_encoder *rc)
57 rc->low = 0;
58 rc->cache_size = 1;
59 rc->range = UINT32_MAX;
60 rc->cache = 0;
61 rc->count = 0;
62 rc->pos = 0;
67 rc_bit(lzma_range_encoder *rc, probability *prob, uint32_t bit)
69 rc->symbols[rc->count] = bit;
70 rc->probs[rc->count] = prob;
71 ++rc->count;
76 rc_bittree(lzma_range_encoder *rc, probability *probs,
83 rc_bit(rc, &probs[model_index], bit);
90 rc_bittree_reverse(lzma_range_encoder *rc, probability *probs,
98 rc_bit(rc, &probs[model_index], bit);
105 rc_direct(lzma_range_encoder *rc,
109 rc->symbols[rc->count++]
116 rc_flush(lzma_range_encoder *rc)
119 rc->symbols[rc->count++] = RC_FLUSH;
124 rc_shift_low(lzma_range_encoder *rc,
127 if ((uint32_t)(rc->low) < (uint32_t)(0xFF000000)
128 || (uint32_t)(rc->low >> 32) != 0) {
133 out[*out_pos] = rc->cache + (uint8_t)(rc->low >> 32);
135 rc->cache = 0xFF;
137 } while (--rc->cache_size != 0);
139 rc->cache = (rc->low >> 24) & 0xFF;
142 ++rc->cache_size;
143 rc->low = (rc->low & 0x00FFFFFF) << RC_SHIFT_BITS;
150 rc_encode(lzma_range_encoder *rc,
153 assert(rc->count <= RC_SYMBOLS_MAX);
155 while (rc->pos < rc->count) {
157 if (rc->range < RC_TOP_VALUE) {
158 if (rc_shift_low(rc, out, out_pos, out_size))
161 rc->range <<= RC_SHIFT_BITS;
165 switch (rc->symbols[rc->pos]) {
167 probability prob = *rc->probs[rc->pos];
168 rc->range = (rc->range >> RC_BIT_MODEL_TOTAL_BITS)
171 *rc->probs[rc->pos] = prob;
176 probability prob = *rc->probs[rc->pos];
177 const uint32_t bound = prob * (rc->range
179 rc->low += bound;
180 rc->range -= bound;
182 *rc->probs[rc->pos] = prob;
187 rc->range >>= 1;
191 rc->range >>= 1;
192 rc->low += rc->range;
197 rc->range = UINT32_MAX;
201 if (rc_shift_low(rc, out, out_pos, out_size))
203 } while (++rc->pos < rc->count);
207 rc_reset(rc);
215 ++rc->pos;
218 rc->count = 0;
219 rc->pos = 0;
226 rc_pending(const lzma_range_encoder *rc)
228 return rc->cache_size + 5 - 1;