Skip to content

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. For nb_subfr == 1 or nb_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

Edited by vaillancour

Merge request reports

Loading