engine: client: fix crash when sound pitch is too high

This commit is contained in:
Alibek Omarov
2025-12-14 03:44:17 +03:00
parent ce08f071b1
commit 785b2881b6

View File

@@ -34,11 +34,11 @@ enum
// fixed point stuff for real-time resampling
#define FIX_BITS 28
#define FIX_SCALE ( 1 << FIX_BITS )
#define FIX_MASK (( 1 << FIX_BITS ) - 1 )
#define FIX_FLOAT( a ) ((int)(( a ) * FIX_SCALE ))
#define FIX( a ) (((int)( a )) << FIX_BITS )
#define FIX_INTPART( a ) (((int)( a )) >> FIX_BITS )
#define FIX_SCALE ( 1U << FIX_BITS )
#define FIX_MASK (( 1U << FIX_BITS ) - 1 )
#define FIX_FLOAT( a ) ((uint)(( a ) * FIX_SCALE ))
#define FIX( a ) (((uint)( a )) << FIX_BITS )
#define FIX_INTPART( a ) (((uint)( a )) >> FIX_BITS )
#define FIX_FRACPART( a ) (( a ) & FIX_MASK )
typedef struct
@@ -279,13 +279,14 @@ static void S_PaintStereoFrom16( portable_samplepair_t *pbuf, int *volume, short
}
}
static void S_Mix8MonoTimeCompress( portable_samplepair_t *pbuf, int *volume, byte *pData, int inputOffset, uint rateScale, int outCount, int timecompress )
static void S_Mix8MonoTimeCompress( portable_samplepair_t *pbuf, int *volume, byte *pData, uint inputOffset, uint rateScale, int outCount, int timecompress )
{
}
static void S_Mix8Mono( portable_samplepair_t *pbuf, int *volume, byte *pData, int inputOffset, uint rateScale, int outCount, int timecompress )
static void S_Mix8Mono( portable_samplepair_t *pbuf, int *volume, byte *pData, uint inputOffset, uint rateScale, int outCount, int timecompress )
{
int i, sampleIndex = 0;
int i;
uint sampleIndex = 0;
uint sampleFrac = inputOffset;
int *lscale, *rscale;
@@ -315,9 +316,10 @@ static void S_Mix8Mono( portable_samplepair_t *pbuf, int *volume, byte *pData, i
}
}
static void S_Mix8Stereo( portable_samplepair_t *pbuf, int *volume, byte *pData, int inputOffset, uint rateScale, int outCount )
static void S_Mix8Stereo( portable_samplepair_t *pbuf, int *volume, byte *pData, uint inputOffset, uint rateScale, int outCount )
{
int i, sampleIndex = 0;
int i;
uint sampleIndex = 0;
uint sampleFrac = inputOffset;
int *lscale, *rscale;
@@ -341,9 +343,10 @@ static void S_Mix8Stereo( portable_samplepair_t *pbuf, int *volume, byte *pData,
}
}
static void S_Mix16Mono( portable_samplepair_t *pbuf, int *volume, short *pData, int inputOffset, uint rateScale, int outCount )
static void S_Mix16Mono( portable_samplepair_t *pbuf, int *volume, short *pData, uint inputOffset, uint rateScale, int outCount )
{
int i, sampleIndex = 0;
int i;
uint sampleIndex = 0;
uint sampleFrac = inputOffset;
// Not using pitch shift?
@@ -363,9 +366,10 @@ static void S_Mix16Mono( portable_samplepair_t *pbuf, int *volume, short *pData,
}
}
static void S_Mix16Stereo( portable_samplepair_t *pbuf, int *volume, short *pData, int inputOffset, uint rateScale, int outCount )
static void S_Mix16Stereo( portable_samplepair_t *pbuf, int *volume, short *pData, uint inputOffset, uint rateScale, int outCount )
{
int i, sampleIndex = 0;
int i;
uint sampleIndex = 0;
uint sampleFrac = inputOffset;
// Not using pitch shift?
@@ -385,7 +389,7 @@ static void S_Mix16Stereo( portable_samplepair_t *pbuf, int *volume, short *pDat
}
}
static void S_MixChannel( channel_t *pChannel, void *pData, int outputOffset, int inputOffset, uint fracRate, int outCount, int timecompress )
static void S_MixChannel( channel_t *pChannel, void *pData, int outputOffset, uint inputOffset, uint fracRate, int outCount, int timecompress )
{
int pvol[CCHANVOLUMES];
paintbuffer_t *ppaint = MIX_GetCurrentPaintbufferPtr();