[WDMAUD.DRV/KMIXER] Replace a float mul/div/round operation with integer math.
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Wed, 6 Sep 2017 21:09:25 +0000 (21:09 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Wed, 6 Sep 2017 21:09:25 +0000 (21:09 +0000)
svn path=/trunk/; revision=75779

reactos/dll/win32/wdmaud.drv/mixer.c
reactos/drivers/wdm/audio/filters/kmixer/pin.c

index 0f00ccc..73cd376 100644 (file)
@@ -50,7 +50,7 @@ PerformSampleRateConversion(
         return ERROR_NOT_ENOUGH_MEMORY;
     }
 
-    NewSamples = lrintf(((FLOAT)NumSamples * ((FLOAT)NewRate / (FLOAT)OldRate))) + 2;
+    NewSamples = ((((ULONG64)NumSamples * NewRate) + (OldRate / 2)) / OldRate) + 2;
 
     FloatOut = HeapAlloc(GetProcessHeap(), 0, NewSamples * NumChannels * sizeof(FLOAT));
     if (!FloatOut)
index d00ba04..eb2196c 100644 (file)
@@ -59,7 +59,7 @@ PerformSampleRateConversion(
         return STATUS_INSUFFICIENT_RESOURCES;
     }
 
-    NewSamples = lrintf(((FLOAT)NumSamples * ((FLOAT)NewRate / (FLOAT)OldRate))) + 2;
+    NewSamples = ((((ULONG64)NumSamples * NewRate) + (OldRate / 2)) / OldRate) + 2;
 
     FloatOut = ExAllocatePool(NonPagedPool, NewSamples * NumChannels * sizeof(FLOAT));
     if (!FloatOut)