diff --git a/src/audio/SDL_audiocvt.c b/src/audio/SDL_audiocvt.c index 603e7db6b..efeb5389e 100644 --- a/src/audio/SDL_audiocvt.c +++ b/src/audio/SDL_audiocvt.c @@ -104,6 +104,7 @@ SDL_Convert51ToStereo(SDL_AudioCVT * cvt, SDL_AudioFormat format) float *dst = (float *) cvt->buf; const float *src = dst; int i; + const float two_fifths = 1.0f / 2.5f; LOG_DEBUG_CONVERT("5.1", "stereo"); SDL_assert(format == AUDIO_F32SYS); @@ -111,8 +112,8 @@ SDL_Convert51ToStereo(SDL_AudioCVT * cvt, SDL_AudioFormat format) /* SDL's 5.1 layout: FL+FR+FC+LFE+BL+BR */ for (i = cvt->len_cvt / (sizeof (float) * 6); i; --i, src += 6, dst += 2) { const float front_center_distributed = src[2] * 0.5f; - dst[0] = (src[0] + front_center_distributed + src[4]) / 2.5f; /* left */ - dst[1] = (src[1] + front_center_distributed + src[5]) / 2.5f; /* right */ + dst[0] = (src[0] + front_center_distributed + src[4]) * two_fifths; /* left */ + dst[1] = (src[1] + front_center_distributed + src[5]) * two_fifths; /* right */ } cvt->len_cvt /= 3; @@ -152,6 +153,7 @@ SDL_Convert71To51(SDL_AudioCVT * cvt, SDL_AudioFormat format) float *dst = (float *) cvt->buf; const float *src = dst; int i; + const float two_thirds = 1.0f / 1.5f; LOG_DEBUG_CONVERT("7.1", "5.1"); SDL_assert(format == AUDIO_F32SYS); @@ -159,12 +161,12 @@ SDL_Convert71To51(SDL_AudioCVT * cvt, SDL_AudioFormat format) for (i = cvt->len_cvt / (sizeof (float) * 8); i; --i, src += 8, dst += 6) { const float surround_left_distributed = src[6] * 0.5f; const float surround_right_distributed = src[7] * 0.5f; - dst[0] = (src[0] + surround_left_distributed) / 1.5f; /* FL */ - dst[1] = (src[1] + surround_right_distributed) / 1.5f; /* FR */ - dst[2] = src[2] / 1.5f; /* CC */ - dst[3] = src[3] / 1.5f; /* LFE */ - dst[4] = (src[4] + surround_left_distributed) / 1.5f; /* BL */ - dst[5] = (src[5] + surround_right_distributed) / 1.5f; /* BR */ + dst[0] = (src[0] + surround_left_distributed) * two_thirds; /* FL */ + dst[1] = (src[1] + surround_right_distributed) * two_thirds; /* FR */ + dst[2] = src[2] * two_thirds; /* CC */ + dst[3] = src[3] * two_thirds; /* LFE */ + dst[4] = (src[4] + surround_left_distributed) * two_thirds; /* BL */ + dst[5] = (src[5] + surround_right_distributed) * two_thirds; /* BR */ } cvt->len_cvt /= 8; @@ -182,6 +184,7 @@ SDL_Convert51ToQuad(SDL_AudioCVT * cvt, SDL_AudioFormat format) float *dst = (float *) cvt->buf; const float *src = dst; int i; + const float two_thirds = 1.0f / 1.5f; LOG_DEBUG_CONVERT("5.1", "quad"); SDL_assert(format == AUDIO_F32SYS); @@ -190,10 +193,10 @@ SDL_Convert51ToQuad(SDL_AudioCVT * cvt, SDL_AudioFormat format) /* SDL's 5.1 layout: FL+FR+FC+LFE+BL+BR */ for (i = cvt->len_cvt / (sizeof (float) * 6); i; --i, src += 6, dst += 4) { const float front_center_distributed = src[2] * 0.5f; - dst[0] = (src[0] + front_center_distributed) / 1.5f; /* FL */ - dst[1] = (src[1] + front_center_distributed) / 1.5f; /* FR */ - dst[2] = src[4] / 1.5f; /* BL */ - dst[3] = src[5] / 1.5f; /* BR */ + dst[0] = (src[0] + front_center_distributed) * two_thirds; /* FL */ + dst[1] = (src[1] + front_center_distributed) * two_thirds; /* FR */ + dst[2] = src[4] * two_thirds; /* BL */ + dst[3] = src[5] * two_thirds; /* BR */ } cvt->len_cvt /= 6;