MCPcopy Create free account
hub / github.com/audacity/audacity / ProcessOne1x

Method ProcessOne1x

src/effects/Equalization48x.cpp:619–671  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

617}
618
619bool EffectEqualization48x::ProcessOne1x(int count, WaveTrack * t,
620 sampleCount start, sampleCount len)
621{
622 //sampleCount blockCount=len/mBlockSize;
623
624 auto trackBlockSize = t->GetMaxBlockSize();
625
626 auto output = t->EmptyCopy();
627 t->ConvertToSampleFormat( floatSample );
628
629 mEffectEqualization->TrackProgress(count, 0.0);
630 int subBufferSize=mBufferCount==8?(mSubBufferSize>>1):mSubBufferSize; // half the buffers if avx is active
631 auto bigRuns=len/(subBufferSize-mBlockSize);
632 int trackBlocksPerBig=subBufferSize/trackBlockSize;
633 int trackLeftovers=subBufferSize-trackBlocksPerBig*trackBlockSize;
634 size_t singleProcessLength;
635 if(bigRuns == 0)
636 singleProcessLength = len.as_size_t();
637 else
638 singleProcessLength =
639 ((mFilterSize>>1)*bigRuns + len%(bigRuns*(subBufferSize-mBlockSize)))
640 .as_size_t();
641 auto currentSample=start;
642 bool bBreakLoop = false;
643 for(int bigRun=0;bigRun<bigRuns;bigRun++)
644 {
645 // fill the buffer
646 for(int i=0;i<trackBlocksPerBig;i++) {
647 t->Get((samplePtr)&mBigBuffer[i*trackBlockSize], floatSample, currentSample, trackBlockSize);
648 currentSample+=trackBlockSize;
649 }
650 if(trackLeftovers) {
651 t->Get((samplePtr)&mBigBuffer[trackBlocksPerBig*trackBlockSize], floatSample, currentSample, trackLeftovers);
652 currentSample+=trackLeftovers;
653 }
654 currentSample-=mBlockSize+(mFilterSize>>1);
655
656 ProcessBuffer1x(mBufferInfo.get());
657 bBreakLoop=mEffectEqualization->TrackProgress(count, (double)(bigRun)/bigRuns.as_double());
658 if( bBreakLoop )
659 break;
660 output->Append((samplePtr)&mBigBuffer[(bigRun?mBlockSize:0)+(mFilterSize>>1)], floatSample, subBufferSize-((bigRun?mBlockSize:0)+(mFilterSize>>1)));
661 }
662 if(singleProcessLength && !bBreakLoop) {
663 t->Get((samplePtr)mBigBuffer.get(), floatSample, currentSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
664 ProcessBuffer(mBigBuffer.get(), mBigBuffer.get(), singleProcessLength+mBlockSize+(mFilterSize>>1));
665 output->Append((samplePtr)&mBigBuffer[bigRuns > 0 ? mBlockSize : 0], floatSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
666 }
667 output->Flush();
668 if(!bBreakLoop)
669 ProcessTail(t, output.get(), start, len);
670 return bBreakLoop;
671}
672
673void EffectEqualization48x::Filter1x(size_t len,
674 float *buffer, float *scratchBuffer)

Callers

nothing calls this directly

Calls 9

EmptyCopyMethod · 0.80
TrackProgressMethod · 0.80
as_size_tMethod · 0.80
GetMaxBlockSizeMethod · 0.45
ConvertToSampleFormatMethod · 0.45
GetMethod · 0.45
getMethod · 0.45
AppendMethod · 0.45
FlushMethod · 0.45

Tested by

no test coverage detected