[Non BE] Fix issues with EVS compatible stereo to mono downmix (quality on specific items + use of double)
- Related issues: #947 (closed) (main issue), #567 (closed) (related issue addressed in the same branch)
- Requested reviewers: NTT (@moriya)
Reason why this change is needed
Several issues have been identified on the EVS compatible stereo to mono downmix:
- use of double arithmetic
- double-precision mathematic functions should be replaced by single-precision ones, e.g.
(float) sqrt()
->sqrtf()
- Unnecessary data type conversion statements should be removed:
(float) inv_sqrt()
->inv_sqrtf()
-
other formal issue: Constant
STEREO_DMX_EVS_SHIFT_LIMIT
should be replaced bySTEREO_DFT_ZP_NS_ENC
and constructions like(int16_t) ( STEREO_DMX_EVS_SHIFT_LIMIT * input_Fs / 1000 )
byNS2SA()
-
problem of level consistency when switching between downmix modes (POC/PHA) for specific critical items
-
quality artifacts in POR or PHA modes for specific critical items
Description of the change
See code changes under separate flags:
#define BE_FIX_567_DOUBLE_STEREO_DMX /* NTT: Fix formal issues */
#define NONBE_FIX_567_DOUBLE_STEREO_DMX /* Orange: Double-precision replaced by single-precision */
#define NONBE_FIX_947_STEREO_DMX_EVS_POC /* Orange: Fix clicks on POC */
#define NONBE_FIX_947_STEREO_DMX_EVS_PHA /* Orange: Fix issues on PHA */
Affected operating points
EVS compatible stereo to mono downmix