Pass the desired resampler to CreateSampleConverter

This commit is contained in:
Chris Robinson
2018-11-28 23:19:25 -08:00
parent e017d9e40f
commit 57bb467072
3 changed files with 12 additions and 6 deletions
+1 -1
View File
@@ -1666,7 +1666,7 @@ HRESULT ALCwasapiCapture::resetProxy()
{
mSampleConv = CreateSampleConverter(
srcType, device->FmtType, ChannelsFromDevFmt(device->FmtChans, device->mAmbiOrder),
OutputType.Format.nSamplesPerSec, device->Frequency
OutputType.Format.nSamplesPerSec, device->Frequency, BSinc24Resampler
);
if(!mSampleConv)
{
+8 -4
View File
@@ -136,7 +136,9 @@ void Stereo2Mono(ALfloat *RESTRICT dst, const void *src, ALsizei frames)
} // namespace
SampleConverter *CreateSampleConverter(enum DevFmtType srcType, enum DevFmtType dstType, ALsizei numchans, ALsizei srcRate, ALsizei dstRate)
SampleConverter *CreateSampleConverter(enum DevFmtType srcType, enum DevFmtType dstType,
ALsizei numchans, ALsizei srcRate, ALsizei dstRate,
Resampler resampler)
{
if(numchans <= 0 || srcRate <= 0 || dstRate <= 0)
return nullptr;
@@ -161,9 +163,11 @@ SampleConverter *CreateSampleConverter(enum DevFmtType srcType, enum DevFmtType
converter->mResample = Resample_copy_C;
else
{
/* TODO: Allow other resamplers. */
BsincPrepare(converter->mIncrement, &converter->mState.bsinc, &bsinc12);
converter->mResample = SelectResampler(BSinc12Resampler);
if(resampler == BSinc24Resampler)
BsincPrepare(converter->mIncrement, &converter->mState.bsinc, &bsinc24);
else if(resampler == BSinc12Resampler)
BsincPrepare(converter->mIncrement, &converter->mState.bsinc, &bsinc12);
converter->mResample = SelectResampler(resampler);
}
return converter;
+3 -1
View File
@@ -29,7 +29,9 @@ struct SampleConverter {
DEF_PLACE_NEWDEL()
};
SampleConverter *CreateSampleConverter(enum DevFmtType srcType, enum DevFmtType dstType, ALsizei numchans, ALsizei srcRate, ALsizei dstRate);
SampleConverter *CreateSampleConverter(enum DevFmtType srcType, enum DevFmtType dstType,
ALsizei numchans, ALsizei srcRate, ALsizei dstRate,
Resampler resampler);
void DestroySampleConverter(SampleConverter **converter);
ALsizei SampleConverterInput(SampleConverter *converter, const ALvoid **src, ALsizei *srcframes, ALvoid *dst, ALsizei dstframes);