Module: wine Branch: master Commit: 64cdecc6325e574b6b92e7a247c9f6a0f3396717 URL: https://gitlab.winehq.org/wine/wine/-/commit/64cdecc6325e574b6b92e7a247c9f6a...
Author: Anton Baskanov baskanov@gmail.com Date: Sun Apr 23 23:46:10 2023 +0700
dsound: Avoid division by zero when calculating Doppler shift.
---
dlls/dsound/sound3d.c | 3 ++- dlls/dsound/tests/ds3d.c | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/dlls/dsound/sound3d.c b/dlls/dsound/sound3d.c index 5d10af4329c..b062917b219 100644 --- a/dlls/dsound/sound3d.c +++ b/dlls/dsound/sound3d.c @@ -298,7 +298,8 @@ void DSOUND_Calc3DBuffer(IDirectSoundBufferImpl *dsb) } else if (!(dsb->ds3db_ds3db.vVelocity.x == dsb->device->ds3dl.vVelocity.x && dsb->ds3db_ds3db.vVelocity.y == dsb->device->ds3dl.vVelocity.y && - dsb->ds3db_ds3db.vVelocity.z == dsb->device->ds3dl.vVelocity.z)) + dsb->ds3db_ds3db.vVelocity.z == dsb->device->ds3dl.vVelocity.z) && + !(vDistance.x == 0.0f && vDistance.y == 0.0f && vDistance.z == 0.0f)) { /* calculate length of ds3db_ds3db.vVelocity component which causes Doppler Effect NOTE: if buffer moves TOWARDS the listener, its velocity component is NEGATIVE diff --git a/dlls/dsound/tests/ds3d.c b/dlls/dsound/tests/ds3d.c index 76269f1fcfe..5e6ba4d204e 100644 --- a/dlls/dsound/tests/ds3d.c +++ b/dlls/dsound/tests/ds3d.c @@ -1439,6 +1439,8 @@ static void test_doppler(GUID *guid, BOOL play) check_doppler(dsound, listener, play, DS3DMODE_NORMAL, 0, 0, 1, -90, 22050, 29400); check_doppler(dsound, listener, play, DS3DMODE_NORMAL, 0, 0, 1, 90, 22050, 17640);
+ check_doppler(dsound, listener, play, DS3DMODE_NORMAL, 0, 0, 0, -90, 22050, 22050); + IDirectSound3DListener_Release(listener); ref = IDirectSoundBuffer_Release(primary); ok(!ref, "Got outstanding refcount %ld.\n", ref);