of the states are called. Inspired by zlib.
*/
- int zero_blocks;
+ int zero_blocks, b;
int64_t gamma, beta, ms, delta1;
int k;
decode_state *state;
DROPFS();
if (zero_blocks == ROS) {
- zero_blocks = 64 - (
- (state->samples_out / strm->block_size)
- % strm->rsi % 64);
+ b = (state->samples_out / strm->block_size) % strm->rsi;
+ zero_blocks = MIN(strm->rsi - b, 64 - (b % 64));
} else if (zero_blocks > ROS) {
zero_blocks--;
}
state->zero_ref = state->ref;
state->zero_ref_sample = state->block_p[0];
}
- if ((strm->rsi - state->blocks_avail) % 64 == 0) {
+ if (state->blocks_avail == 0
+ || (strm->rsi - state->blocks_avail) % 64 == 0) {
if (state->zero_blocks > 4)
state->zero_blocks = ROS;
state->mode = m_encode_zero;
int check_block_sizes(struct test_state *state, int id, int id_len)
{
- int bs, status;
+ int bs, status, rsi, max_rsi;
for (bs = 8; bs <= 64; bs *= 2) {
state->strm->block_size = bs;
- state->strm->rsi = state->buf_len
- / (bs * state->byte_per_sample);
- status = encode_decode(state);
- if (status)
- return status;
+ max_rsi = state->buf_len / (bs * state->byte_per_sample);
+ if (max_rsi > 4096)
+ max_rsi = 4096;
+
+ for (rsi = 1; rsi <= max_rsi; rsi++) {
+ state->strm->rsi = rsi;
+ status = encode_decode(state);
+ if (status)
+ return status;
- if ((state->cbuf[0] >> (8 - id_len)) != id) {
- printf("FAIL: Unexpected block of size %i created %x.\n",
- bs, state->cbuf[0] >> (8 - id_len));
- return 99;
+ if ((state->cbuf[0] >> (8 - id_len)) != id) {
+ printf("FAIL: Unexpected block of size %i created ID:%x.\n",
+ bs, state->cbuf[0] >> (8 - id_len));
+ return 99;
+ }
}
}
return 0;