mirror of
https://github.com/cookiengineer/audacity
synced 2025-07-31 07:59:27 +02:00
Remove naked malloc (or similar) and free in: Equalization48x
This commit is contained in:
parent
1614db9994
commit
03809532ca
@ -158,7 +158,7 @@ void * malloc_simd(const size_t size)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void free_simd(void* mem)
|
void free_simd::operator() (void* mem) const
|
||||||
{
|
{
|
||||||
#if defined WIN32 // WIN32
|
#if defined WIN32 // WIN32
|
||||||
_aligned_free(mem);
|
_aligned_free(mem);
|
||||||
@ -169,7 +169,7 @@ void free_simd(void* mem)
|
|||||||
|
|
||||||
EffectEqualization48x::EffectEqualization48x():
|
EffectEqualization48x::EffectEqualization48x():
|
||||||
mThreadCount(0),mFilterSize(0),mWindowSize(0),mBlockSize(0),mWorkerDataCount(0),mBlocksPerBuffer(20),
|
mThreadCount(0),mFilterSize(0),mWindowSize(0),mBlockSize(0),mWorkerDataCount(0),mBlocksPerBuffer(20),
|
||||||
mScratchBufferSize(0),mSubBufferSize(0),mBigBuffer(NULL),mThreaded(false),
|
mScratchBufferSize(0),mSubBufferSize(0),mThreaded(false),
|
||||||
mBenching(false),mBufferCount(0)
|
mBenching(false),mBufferCount(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -211,7 +211,7 @@ bool EffectEqualization48x::AllocateBuffersWorkers(int nThreads)
|
|||||||
|
|
||||||
mScratchBufferSize=mWindowSize*3*sizeof(float)*mBufferCount; // 3 window size blocks of instruction size
|
mScratchBufferSize=mWindowSize*3*sizeof(float)*mBufferCount; // 3 window size blocks of instruction size
|
||||||
mSubBufferSize=mBlockSize*(mBufferCount*(mBlocksPerBuffer-1)); // we are going to do a full block overlap
|
mSubBufferSize=mBlockSize*(mBufferCount*(mBlocksPerBuffer-1)); // we are going to do a full block overlap
|
||||||
mBigBuffer=(float *)malloc_simd(sizeof(float)*(mSubBufferSize+mFilterSize+mScratchBufferSize)*mWorkerDataCount); // we run over by filtersize
|
mBigBuffer.reset( (float *)malloc_simd(sizeof(float) * (mSubBufferSize + mFilterSize + mScratchBufferSize) * mWorkerDataCount) ); // we run over by filtersize
|
||||||
// fill the bufferInfo
|
// fill the bufferInfo
|
||||||
mBufferInfo.reinit(mWorkerDataCount);
|
mBufferInfo.reinit(mWorkerDataCount);
|
||||||
for(int i=0;i<mWorkerDataCount;i++) {
|
for(int i=0;i<mWorkerDataCount;i++) {
|
||||||
@ -250,8 +250,7 @@ bool EffectEqualization48x::FreeBuffersWorkers()
|
|||||||
mWorkerDataCount=0;
|
mWorkerDataCount=0;
|
||||||
}
|
}
|
||||||
mBufferInfo.reset();
|
mBufferInfo.reset();
|
||||||
free_simd(mBigBuffer);
|
mBigBuffer.reset();
|
||||||
mBigBuffer=NULL;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -672,8 +671,8 @@ bool EffectEqualization48x::ProcessOne1x(int count, WaveTrack * t,
|
|||||||
output->Append((samplePtr)&mBigBuffer[(bigRun?mBlockSize:0)+(mFilterSize>>1)], floatSample, subBufferSize-((bigRun?mBlockSize:0)+(mFilterSize>>1)));
|
output->Append((samplePtr)&mBigBuffer[(bigRun?mBlockSize:0)+(mFilterSize>>1)], floatSample, subBufferSize-((bigRun?mBlockSize:0)+(mFilterSize>>1)));
|
||||||
}
|
}
|
||||||
if(singleProcessLength && !bBreakLoop) {
|
if(singleProcessLength && !bBreakLoop) {
|
||||||
t->Get((samplePtr)mBigBuffer, floatSample, currentSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
t->Get((samplePtr)mBigBuffer.get(), floatSample, currentSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
||||||
ProcessBuffer(mBigBuffer, mBigBuffer, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
ProcessBuffer(mBigBuffer.get(), mBigBuffer.get(), singleProcessLength+mBlockSize+(mFilterSize>>1));
|
||||||
output->Append((samplePtr)&mBigBuffer[bigRuns > 0 ? mBlockSize : 0], floatSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
output->Append((samplePtr)&mBigBuffer[bigRuns > 0 ? mBlockSize : 0], floatSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
||||||
}
|
}
|
||||||
output->Flush();
|
output->Flush();
|
||||||
@ -853,8 +852,8 @@ bool EffectEqualization48x::ProcessOne4x(int count, WaveTrack * t,
|
|||||||
output->Append((samplePtr)&mBigBuffer[(bigRun?mBlockSize:0)+(mFilterSize>>1)], floatSample, subBufferSize-((bigRun?mBlockSize:0)+(mFilterSize>>1)));
|
output->Append((samplePtr)&mBigBuffer[(bigRun?mBlockSize:0)+(mFilterSize>>1)], floatSample, subBufferSize-((bigRun?mBlockSize:0)+(mFilterSize>>1)));
|
||||||
}
|
}
|
||||||
if(singleProcessLength && !bBreakLoop) {
|
if(singleProcessLength && !bBreakLoop) {
|
||||||
t->Get((samplePtr)mBigBuffer, floatSample, currentSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
t->Get((samplePtr)mBigBuffer.get(), floatSample, currentSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
||||||
ProcessBuffer(mBigBuffer, mBigBuffer, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
ProcessBuffer(mBigBuffer.get(), mBigBuffer.get(), singleProcessLength+mBlockSize+(mFilterSize>>1));
|
||||||
output->Append((samplePtr)&mBigBuffer[bigRuns > 0 ? mBlockSize : 0], floatSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
output->Append((samplePtr)&mBigBuffer[bigRuns > 0 ? mBlockSize : 0], floatSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
||||||
// output->Append((samplePtr)&mBigBuffer[bigRuns?mBlockSize:0], floatSample, singleProcessLength);
|
// output->Append((samplePtr)&mBigBuffer[bigRuns?mBlockSize:0], floatSample, singleProcessLength);
|
||||||
}
|
}
|
||||||
@ -965,8 +964,8 @@ bool EffectEqualization48x::ProcessOne1x4xThreaded(int count, WaveTrack * t,
|
|||||||
mDataMutex.Unlock(); // Get back in line for data
|
mDataMutex.Unlock(); // Get back in line for data
|
||||||
}
|
}
|
||||||
if(singleProcessLength && !bBreakLoop) {
|
if(singleProcessLength && !bBreakLoop) {
|
||||||
t->Get((samplePtr)mBigBuffer, floatSample, currentSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
t->Get((samplePtr)mBigBuffer.get(), floatSample, currentSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
||||||
ProcessBuffer(mBigBuffer, mBigBuffer, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
ProcessBuffer(mBigBuffer.get(), mBigBuffer.get(), singleProcessLength+mBlockSize+(mFilterSize>>1));
|
||||||
output->Append((samplePtr)&mBigBuffer[mBlockSize], floatSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
output->Append((samplePtr)&mBigBuffer[mBlockSize], floatSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
||||||
}
|
}
|
||||||
output->Flush();
|
output->Flush();
|
||||||
@ -1183,8 +1182,8 @@ bool EffectEqualization48x::ProcessOne8x(int count, WaveTrack * t,
|
|||||||
output->Append((samplePtr)&mBigBuffer[(bigRun?mBlockSize:0)+(mFilterSize>>1)], floatSample, mSubBufferSize-((bigRun?mBlockSize:0)+(mFilterSize>>1)));
|
output->Append((samplePtr)&mBigBuffer[(bigRun?mBlockSize:0)+(mFilterSize>>1)], floatSample, mSubBufferSize-((bigRun?mBlockSize:0)+(mFilterSize>>1)));
|
||||||
}
|
}
|
||||||
if(singleProcessLength && !bBreakLoop) {
|
if(singleProcessLength && !bBreakLoop) {
|
||||||
t->Get((samplePtr)mBigBuffer, floatSample, currentSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
t->Get((samplePtr)mBigBuffer.get(), floatSample, currentSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
||||||
ProcessBuffer(mBigBuffer, mBigBuffer, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
ProcessBuffer(mBigBuffer.get(), mBigBuffer.get(), singleProcessLength+mBlockSize+(mFilterSize>>1));
|
||||||
output->Append((samplePtr)&mBigBuffer[mBlockSize], floatSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
output->Append((samplePtr)&mBigBuffer[mBlockSize], floatSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
||||||
}
|
}
|
||||||
output->Flush();
|
output->Flush();
|
||||||
@ -1262,8 +1261,8 @@ bool EffectEqualization48x::ProcessOne8xThreaded(int count, WaveTrack * t,
|
|||||||
mDataMutex.Unlock(); // Get back in line for data
|
mDataMutex.Unlock(); // Get back in line for data
|
||||||
}
|
}
|
||||||
if(singleProcessLength && !bBreakLoop) {
|
if(singleProcessLength && !bBreakLoop) {
|
||||||
t->Get((samplePtr)mBigBuffer, floatSample, currentSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
t->Get((samplePtr)mBigBuffer.get(), floatSample, currentSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
||||||
ProcessBuffer(mBigBuffer, mBigBuffer, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
ProcessBuffer(mBigBuffer.get(), mBigBuffer.get(), singleProcessLength+mBlockSize+(mFilterSize>>1));
|
||||||
output->Append((samplePtr)&mBigBuffer[mBlockSize], floatSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
output->Append((samplePtr)&mBigBuffer[mBlockSize], floatSample, singleProcessLength+mBlockSize+(mFilterSize>>1));
|
||||||
}
|
}
|
||||||
output->Flush();
|
output->Flush();
|
||||||
|
@ -32,6 +32,11 @@ Intrinsics (SSE/AVX) and Threaded Equalization
|
|||||||
#define MATH_FUNCTION_AVX 16
|
#define MATH_FUNCTION_AVX 16
|
||||||
#define MATH_FUNCTION_SEGMENTED_CODE 32
|
#define MATH_FUNCTION_SEGMENTED_CODE 32
|
||||||
|
|
||||||
|
struct free_simd {
|
||||||
|
void operator () (void*) const;
|
||||||
|
};
|
||||||
|
using simd_floats = std::unique_ptr< float[], free_simd >;
|
||||||
|
|
||||||
// added by Andrew Hallendorff intrinsics processing
|
// added by Andrew Hallendorff intrinsics processing
|
||||||
enum EQBufferStatus
|
enum EQBufferStatus
|
||||||
{
|
{
|
||||||
@ -156,7 +161,7 @@ private:
|
|||||||
size_t mBlocksPerBuffer;
|
size_t mBlocksPerBuffer;
|
||||||
size_t mScratchBufferSize;
|
size_t mScratchBufferSize;
|
||||||
size_t mSubBufferSize;
|
size_t mSubBufferSize;
|
||||||
float *mBigBuffer;
|
simd_floats mBigBuffer;
|
||||||
ArrayOf<BufferInfo> mBufferInfo;
|
ArrayOf<BufferInfo> mBufferInfo;
|
||||||
wxMutex mDataMutex;
|
wxMutex mDataMutex;
|
||||||
ArrayOf<EQWorker> mEQWorkers;
|
ArrayOf<EQWorker> mEQWorkers;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user