Corrupted accumulation in reduce_metadata_further_fx
# Basic info <!--- Add commit SHA used to reproduce --> - Float reference: - Encoder (float): 2a32cceaf0d7ce3482cb05e5c12951e95a8a552a - Decoder (float): - Fixed point: - Encoder (fixed): a8ff39cd03d151fa6c9a57b1d85de40c806f3772 - Decoder (fixed): # Bug description A temp variable is not reset properly in `reduce_metadata_further_fx` which causes wrong accumulation and corruption. See below: Float ```c for ( band = 0; band < numCodingBands; band++ ) { xSum = 0.0f; ySum = 0.0f; zSum = 0.0f; bandSumEnergy = 0.0f; for ( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) { bandSumEnergy += energy[sf][band]; } spreadCoh[0] = (uint8_t) roundf( spreadCohSum / ( bandSumEnergy + EPSILON ) * 255.0f ); } ``` BASOP ```c W_tmp = 0; <== BUG as reset does not happen properly move64(); FOR( band = 0; band < numCodingBands; band++ ) { xSum = 0; ySum = 0; zSum = 0; bandSumEnergy = 0; move32(); move32(); move32(); move32(); FOR( sf = 0; sf < MAX_PARAM_SPATIAL_SUBFRAMES; sf++ ) { ... W_tmp = W_add( W_tmp, energy[sf][band] ); } tmp2 = W_norm( W_tmp ); tmp2 = s_min( 32, tmp2 ); bandSumEnergy = W_extract_h( W_shl( W_tmp, tmp2 ) ); ... W_xSum_sq = W_mult0_32_32( xSum, xSum ); W_ySum_sq = W_mult0_32_32( ySum, ySum ); W_tmp = W_add( W_xSum_sq, W_ySum_sq ); ... tmp = BASOP_Util_Divide3232_Scale( spreadCohSum, bandSumEnergy, &exp ); } ``` <!--- Below are labels that will be added but are not shown in description. This is a template to help fill them. Add further information to the first row and remove and add labels as necessary. -->
issue