Fix proposal for 2253 [non-BE][allow regression][split-non-BE]
- Related issues: #2253
- Requested reviewers:
Reason why this change is needed
-
In a specific configuration of the GSC codec, the encoder and decoder can become desynchronized due to incorrect minimum pitch calculation. This issue occurs when the number of subframes is set to 2 and the core bitrate is below 9.6 kbps.
The fixed-point encoder incorrectly determines the minimum pitch by checking only the first two pitch values instead of the entire pitch vector. For two subframes, the pitch vector follows the pattern: P1, P1, P2, P2. By considering only the first two values, the encoder may select an incorrect minimum pitch. The floating-point encoder and decoder as well as the fixed point decoder correctly analyze the full vector. This discrepancy can lead to mismatched bit allocation and, ultimately to a BER or an undefined behaviour.
Note: EVS uses the same approach, but the configuration where this could cause an issue (
nb_subfr == 2) is not used at low bitrate. Fornb_subfr == 1ornb_subfr == 4, the different search method does not lead to a different result.
Description of the change
- Change the encoder to simply check all the pitch vector.
Affected operating points
- This can affect all operating points where the core bitrate is below 9.6kbps and the signal is a mix between speech and music (it can affect many operating points, but not often)
- Produced bitstream is non-BE but it is fully backwards compatible for decoding. Decoded output may differ.
- Regressions in the pipeline are < 0.5 MLD, improvement also < 0.5 MLD, so no big impacts, but must be fixed
Closes #2253