Add a special resampler for matching sample rates
This commit is contained in:
@@ -54,7 +54,7 @@ ALfloat ZScale = 1.0f;
|
||||
static ResamplerFunc SelectResampler(enum Resampler Resampler, ALuint increment)
|
||||
{
|
||||
if(increment == FRACTIONONE)
|
||||
return Resample_point32_C;
|
||||
return Resample_copy32_C;
|
||||
switch(Resampler)
|
||||
{
|
||||
case PointResampler:
|
||||
|
||||
+1
-1
@@ -116,7 +116,7 @@ ALvoid MixSource(ALsource *Source, ALCdevice *Device, ALuint SamplesToDo)
|
||||
DataPosFrac = Source->position_fraction;
|
||||
Looping = Source->Looping;
|
||||
increment = Source->Params.Step;
|
||||
Resampler = Source->Resampler;
|
||||
Resampler = (increment==FRACTIONONE) ? PointResampler : Source->Resampler;
|
||||
NumChannels = Source->NumChannels;
|
||||
SampleSize = Source->SampleSize;
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#include "config.h"
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include "alMain.h"
|
||||
#include "alu.h"
|
||||
#include "alSource.h"
|
||||
@@ -13,6 +15,14 @@ static __inline ALfloat lerp32(const ALfloat *vals, ALuint frac)
|
||||
static __inline ALfloat cubic32(const ALfloat *vals, ALuint frac)
|
||||
{ return cubic(vals[-1], vals[0], vals[1], vals[2], frac * (1.0f/FRACTIONONE)); }
|
||||
|
||||
void Resample_copy32_C(const ALfloat *data, ALuint frac,
|
||||
ALuint increment, ALfloat *RESTRICT OutBuffer, ALuint BufferSize)
|
||||
{
|
||||
(void)frac;
|
||||
assert(increment==FRACTIONONE);
|
||||
memcpy(OutBuffer, data, (BufferSize+1)*sizeof(ALfloat));
|
||||
}
|
||||
|
||||
#define DECL_TEMPLATE(Sampler) \
|
||||
void Resample_##Sampler##_C(const ALfloat *data, ALuint frac, \
|
||||
ALuint increment, ALfloat *RESTRICT OutBuffer, ALuint BufferSize) \
|
||||
|
||||
@@ -10,6 +10,7 @@ struct DirectParams;
|
||||
struct SendParams;
|
||||
|
||||
/* C resamplers */
|
||||
void Resample_copy32_C(const ALfloat *src, ALuint frac, ALuint increment, ALfloat *RESTRICT dst, ALuint dstlen);
|
||||
void Resample_point32_C(const ALfloat *src, ALuint frac, ALuint increment, ALfloat *RESTRICT dst, ALuint dstlen);
|
||||
void Resample_lerp32_C(const ALfloat *src, ALuint frac, ALuint increment, ALfloat *RESTRICT dst, ALuint dstlen);
|
||||
void Resample_cubic32_C(const ALfloat *src, ALuint frac, ALuint increment, ALfloat *RESTRICT dst, ALuint dstlen);
|
||||
|
||||
Reference in New Issue
Block a user