Fix clipped sample rate changing between files

When the clipped sample rate changes, the resampler needs to be
restarted. This was previously failing because the target sample rate
wasn't changing.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
This commit is contained in:
Christopher Snowhill 2023-07-14 05:15:14 -07:00
parent c9ed3c4817
commit a6ecd7eed9
No known key found for this signature in database
2 changed files with 9 additions and 1 deletions

View file

@ -42,6 +42,8 @@ using std::atomic_long;
BOOL rsDone;
void *rsstate, *rsold;
double lastClippedSampleRate;
void *rsvis;
double lastVisRate;

View file

@ -85,6 +85,10 @@ static OSStatus eqRenderCallback(void *inRefCon, AudioUnitRenderActionFlags *ioA
format.mSampleRate = maxSampleRate;
dstRate = maxSampleRate;
formatClipped = YES;
if(srcRate != lastClippedSampleRate) {
lastClippedSampleRate = srcRate;
streamFormatStarted = NO;
}
}
if(!streamFormatStarted || config != realStreamChannelConfig || memcmp(&newFormat, &format, sizeof(format)) != 0) {
[currentPtsLock lock];
@ -817,7 +821,7 @@ current_device_listener(AudioObjectID inObjectID, UInt32 inNumberAddresses, cons
rsDone = NO;
realStreamFormat = newFormat;
realStreamChannelConfig = newChannelConfig;
streamFormatChanged = YES;
[self updateStreamFormat];
}
}
@ -962,6 +966,8 @@ current_device_listener(AudioObjectID inObjectID, UInt32 inNumberAddresses, cons
rsDone = NO;
rsstate = NULL;
rsold = NULL;
lastClippedSampleRate = 0.0;
rsvis = NULL;
lastVisRate = 44100.0;