Possible bug regarding exponent handling in function mix_output_block_fx()
# Basic info
- Fixed point: f51f2c5862794da8ecedbc0cf7f1cdded4e5c1e2
# Bug description
Static analysis shows that in function `mix_output_block_fx()` there is a very vague (possibly buggy) point. Inside the function we have:
```
FOR( i = 0; i < hReverb->full_block_size; i++ )
{
pOutL[i] = L_add( pInL[i], ( L_shr( pOutL[i], 2 ) ) );
move32();
pOutR[i] = L_add( pInR[i], ( L_shr( pOutR[i], 2 ) ) );
move32();
}
```
while this looks like standard shifting for providing proper headroom, On the application level it looks like this is not considered properly. Upper level function looks like this:
```
IF( mix_signals )
{
mix_output_block_fx( hReverb, tmp1_fx, tmp2_fx, &pcm_out_fx[0][i_ts * hReverb->full_block_size], &pcm_out_fx[1][i_ts * hReverb->full_block_size] );
}
ELSE
{
Copy32( tmp1_fx, &pcm_out_fx[0][i_mult( i_ts, hReverb->full_block_size )], hReverb->full_block_size );
Copy32( tmp2_fx, &pcm_out_fx[1][i_mult( i_ts, hReverb->full_block_size )], hReverb->full_block_size );
}
```
It is not exactly clear what the exponents are when we arrive at this conditional. Regardless of what the exponents are and will be, one of the snippet is probably saving values in `pcm_out_fx()` with an enexpected exponent. Please investigate this and if not wrong provide comments that describe exponents in functions `mix_output_block_fx()` , `ivas_reverb_process_fx()` and `reverb_block_fx()`
It also looks like the final values must be written with Q11 but the conditional does not guarantee this. In other words if the statement in function `mix_output_block_fx()` is correct in ELSE it must be written with the wrong exponent and vice versa!
issue