From: Mathis Rosenhauer Date: Thu, 4 Oct 2012 15:22:35 +0000 (+0200) Subject: Fix another zero block bug with check X-Git-Tag: accepted/tizen/5.0/unified/20181102.025501~209 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b63f830b39d9d6f344bc36eedf0d46d046227474;p=platform%2Fupstream%2Flibaec.git Fix another zero block bug with check --- diff --git a/src/decode.c b/src/decode.c index 7659c3e..146d52d 100644 --- a/src/decode.c +++ b/src/decode.c @@ -439,7 +439,7 @@ int aec_decode(struct aec_stream *strm, int flush) 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; @@ -522,9 +522,8 @@ int aec_decode(struct aec_stream *strm, int flush) 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--; } diff --git a/src/encode.c b/src/encode.c index 97fd2e8..ea2b53e 100644 --- a/src/encode.c +++ b/src/encode.c @@ -302,7 +302,8 @@ static int m_check_zero_block(struct aec_stream *strm) 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; diff --git a/tests/check_code_options.c b/tests/check_code_options.c index 12b328f..befb72b 100644 --- a/tests/check_code_options.c +++ b/tests/check_code_options.c @@ -9,21 +9,26 @@ 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;