Commit e047ec68 authored by Mathis Rosenhauer's avatar Mathis Rosenhauer

Fix ROS detection in combination with incomplete RSI

parent 1e1919a7
...@@ -646,10 +646,10 @@ static int m_check_zero_block(struct aec_stream *strm) ...@@ -646,10 +646,10 @@ static int m_check_zero_block(struct aec_stream *strm)
state->zero_ref = state->ref; state->zero_ref = state->ref;
state->zero_ref_sample = state->ref_sample; state->zero_ref_sample = state->ref_sample;
} }
if (state->blocks_avail == 0 if (state->blocks_avail == 0 || state->blocks_dispensed % 64 == 0) {
|| (strm->rsi - state->blocks_avail) % 64 == 0) {
if (state->zero_blocks > 4) if (state->zero_blocks > 4)
state->zero_blocks = ROS; state->zero_blocks = ROS;
state->mode = m_encode_zero; state->mode = m_encode_zero;
return M_CONTINUE; return M_CONTINUE;
} }
...@@ -728,6 +728,7 @@ static int m_get_block(struct aec_stream *strm) ...@@ -728,6 +728,7 @@ static int m_get_block(struct aec_stream *strm)
if (state->blocks_avail == 0) { if (state->blocks_avail == 0) {
state->blocks_avail = strm->rsi - 1; state->blocks_avail = strm->rsi - 1;
state->block = state->data_pp; state->block = state->data_pp;
state->blocks_dispensed = 1;
if (strm->avail_in >= state->rsi_len) { if (strm->avail_in >= state->rsi_len) {
state->get_rsi(strm); state->get_rsi(strm);
...@@ -745,6 +746,7 @@ static int m_get_block(struct aec_stream *strm) ...@@ -745,6 +746,7 @@ static int m_get_block(struct aec_stream *strm)
state->uncomp_len = strm->block_size * strm->bits_per_sample; state->uncomp_len = strm->block_size * strm->bits_per_sample;
} }
state->block += strm->block_size; state->block += strm->block_size;
state->blocks_dispensed++;
state->blocks_avail--; state->blocks_avail--;
return m_check_zero_block(strm); return m_check_zero_block(strm);
} }
......
...@@ -94,6 +94,9 @@ struct internal_state { ...@@ -94,6 +94,9 @@ struct internal_state {
/* remaining blocks in buffer */ /* remaining blocks in buffer */
int blocks_avail; int blocks_avail;
/* blocks encoded so far in RSI */
int blocks_dispensed;
/* current (preprocessed) input block */ /* current (preprocessed) input block */
uint32_t *block; uint32_t *block;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment