DSP: Add format change checking to FreeSurround
FreeSurround, like the Equalizer, which attempt to coalesce Audio Chunks into larger blocks of 4096 samples, must check if the audio format has changed between blocks, and stop stacking chunks together when a new format is detected. They will continue processing with less sample data than expected, as necessary. Signed-off-by: Christopher Snowhill <kode54@gmail.com>
This commit is contained in:
parent
ce2bedf478
commit
92dbe351af
1 changed files with 8 additions and 0 deletions
|
@ -198,6 +198,14 @@ static void * kDSPFSurroundNodeContext = &kDSPFSurroundNodeContext;
|
|||
float *samplePtr = resetStreamFormat ? &inBuffer[2048 * 2] : &inBuffer[0];
|
||||
|
||||
while(!stopping && totalFrameCount < totalRequestedSamples) {
|
||||
AudioStreamBasicDescription newInputFormat;
|
||||
uint32_t newChannelConfig;
|
||||
if(![self peekFormat:&newInputFormat channelConfig:&newChannelConfig] ||
|
||||
memcmp(&newInputFormat, &inputFormat, sizeof(newInputFormat)) != 0 ||
|
||||
newChannelConfig != inputChannelConfig) {
|
||||
break;
|
||||
}
|
||||
|
||||
chunk = [self readChunkAsFloat32:totalRequestedSamples - totalFrameCount];
|
||||
if(!chunk) {
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue