Skip to content

Wrong exposant used for specific channel (ic-BWE)

Basic info

  • Float reference:
    • Encoder (float):
    • Decoder (float):
  • Fixed point:
    • Encoder (fixed): 45b3f07f
    • Decoder (fixed):

Bug description

In the ic_BWE, it seems that the wrong exp is used for nonref channel.

in ivas_stereo_icBWE_enc_fx.c at lines 831:857, there are 2 intances where there seems to be some confusions in exponents and channels. Not correcting it leads to saturation within the copy_scale. Correcting it prevent the saturations, but doesn't seem to have a effect on the bitstream. Still I think this should be solved.

>>> max_e = s_max( hStereoICBWE->mem_shb_speech_nonref_e, shb_speech_nonref_e );  
Copy_Scale_sig( hStereoICBWE->mem_shb_speech_ref_fx, hStereoICBWE->mem_shb_speech_ref_fx, L_LOOK_16k, negate( sub( max_e, hStereoICBWE->mem_shb_speech_ref_e ) ) ); // mem_shb_speech_ref_e

set32_fx( shb_frame_ref_fx, 0, L_LOOK_16k + L_FRAME16k );
Copy_Scale_sig_16_32_no_sat( hStereoICBWE->mem_shb_speech_ref_fx, shb_frame_ref_fx, L_LOOK_16k, add( negate( sub( max_e, hStereoICBWE->mem_shb_speech_ref_e ) ), Q16 ) ); // mem_shb_speech_ref_e
hStereoICBWE->mem_shb_speech_ref_e = max_e;
shb_frame_ref_e = max_e;
move16();
move16();
/* shb_frame_ref_ICBWE @ (8.75 - shb_speech_delay (=1.25) ms) after shb_speech */

Copy_Scale_sig32( shb_speech_ref_fx, shb_frame_ref_fx + L_LOOK_16k - refMemLen, L_FRAME16k, negate( sub( max_e, shb_speech_ref_e ) ) );                                         /* Q31-max_e */
Copy_Scale_sig_32_16( shb_frame_ref_fx + L_FRAME16k, hStereoICBWE->mem_shb_speech_ref_fx, L_LOOK_16k, sub( negate( sub( max_e, hStereoICBWE->mem_shb_speech_ref_e ) ), Q16 ) ); // mem_shb_speech_ref_e

set32_fx( shb_frame_nonref_fx, 0, L_LOOK_16k + L_FRAME16k );

max_e = s_max( hStereoICBWE->mem_shb_speech_nonref_e, shb_speech_nonref_e );
Copy_Scale_sig( hStereoICBWE->mem_shb_speech_nonref_fx, hStereoICBWE->mem_shb_speech_nonref_fx, L_LOOK_16k, negate( sub( max_e, hStereoICBWE->mem_shb_speech_nonref_e ) ) );       // mem_shb_speech_ref_e
Copy_Scale_sig_16_32_no_sat( hStereoICBWE->mem_shb_speech_nonref_fx, shb_frame_nonref_fx, L_LOOK_16k, add( negate( sub( max_e, hStereoICBWE->mem_shb_speech_nonref_e ) ), Q16 ) ); // mem_shb_speech_ref_e
hStereoICBWE->mem_shb_speech_nonref_e = max_e;
shb_frame_nonref_e = max_e;
move16();
move16();
shb_frame_ref_ICBWE @ (8.75 - shb_speech_delay (=1.25) ms) after shb_speech */

Copy_Scale_sig32( shb_speech_nonref_fx, shb_frame_nonref_fx + L_LOOK_16k - nonRefMemLen, L_FRAME16k, negate( sub( max_e, shb_speech_nonref_e ) ) );                                   /* Q31-max_e */
>>> Copy_Scale_sig_32_16( shb_frame_nonref_fx + L_FRAME16k, hStereoICBWE->mem_shb_speech_nonref_fx, L_LOOK_16k, sub( negate( sub( max_e, hStereoICBWE->mem_shb_speech_ref_e ) ), Q16 ) ); //  mem_shb_speech_ref_e   

Ways to reproduce

Box folder: ...\Box_EXTERNAL_IVAS_BASOP_VERIFICATION\issues\issue-xxxx