1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-07-12 22:57:43 +02:00

Some compilability fixes for Equalization48x.cpp

This commit is contained in:
Paul Licameli 2019-05-21 19:00:05 -04:00
parent a1f08ad4e0
commit e09c17d0c5
3 changed files with 37 additions and 17 deletions

View File

@ -3,7 +3,7 @@
#include "MemoryX.h" #include "MemoryX.h"
#define fft_type float using fft_type = float;
int SmallRB(int bits, int numberBits); int SmallRB(int bits, int numberBits);

View File

@ -21,6 +21,7 @@
#ifdef EXPERIMENTAL_EQ_SSE_THREADED #ifdef EXPERIMENTAL_EQ_SSE_THREADED
#include "../Project.h" #include "../Project.h"
#include "Equalization.h" #include "Equalization.h"
#include "../WaveClip.h"
#include "../WaveTrack.h" #include "../WaveTrack.h"
#include "../float_cast.h" #include "../float_cast.h"
#include <vector> #include <vector>
@ -300,7 +301,7 @@ bool EffectEqualization48x::Process(EffectEqualization* effectEqualization)
auto cleanup = finally( [&] { FreeBuffersWorkers(); } ); auto cleanup = finally( [&] { FreeBuffersWorkers(); } );
int count = 0; int count = 0;
for( auto track : for( auto track :
mEffectEqualization->mOutputTracks->Selected< WaveTrack >() { mEffectEqualization->mOutputTracks->Selected< WaveTrack >() ) {
double trackStart = track->GetStartTime(); double trackStart = track->GetStartTime();
double trackEnd = track->GetEndTime(); double trackEnd = track->GetEndTime();
double t0 = mEffectEqualization->mT0 < trackStart? trackStart: mEffectEqualization->mT0; double t0 = mEffectEqualization->mT0 < trackStart? trackStart: mEffectEqualization->mT0;
@ -333,24 +334,26 @@ bool EffectEqualization48x::TrackCompare()
auto cleanup = finally( [&] { FreeBuffersWorkers(); } ); auto cleanup = finally( [&] { FreeBuffersWorkers(); } );
// Reset map // Reset map
// PRL: These two maps aren't really used // PRL: These two maps aren't really used
std::vector<Track*> SecondIMap; std::vector<const Track*> SecondIMap;
std::vector<Track*> SecondOMap; std::vector<Track*> SecondOMap;
SecondIMap.clear(); SecondIMap.clear();
SecondOMap.clear(); SecondOMap.clear();
TrackList SecondOutputTracks; auto pSecondOutputTracks = TrackList::Create();
auto &SecondOutputTracks = *pSecondOutputTracks;
for (auto aTrack : mEffectEqualization->mTracks->Any< WaveTrack >()) { for (auto aTrack :
mEffectEqualization->inputTracks()->Any< const WaveTrack >()) {
// Include selected tracks, plus sync-lock selected tracks for Track::All. // Include selected tracks, plus sync-lock selected tracks for Track::All.
if (aTrack->GetSelected() || if (aTrack->GetSelected() ||
(// mEffectEqualization->mOutputTracksType == TrackKind::All && (// mEffectEqualization->mOutputTracksType == TrackKind::All &&
aTrack->IsSyncLockSelected())) aTrack->IsSyncLockSelected()))
{ {
auto o = aTrack->Duplicate(); auto o = mEffectEqualization->mFactory->DuplicateWaveTrack( *aTrack );
SecondIMap.push_back(aTrack); SecondIMap.push_back(aTrack);
SecondIMap.push_back(o.get()); SecondIMap.push_back(o.get());
SecondOutputTracks.push_back( o ); SecondOutputTracks.Add( o );
} }
} }
@ -359,7 +362,7 @@ bool EffectEqualization48x::TrackCompare()
int count = 0; int count = 0;
for( auto track : for( auto track :
( i ? mEffectEqualization->mOutputTracks.get() ( i ? mEffectEqualization->mOutputTracks.get()
: &SecondOutputTracks ) -> Selected< WaveTrack >() { : &SecondOutputTracks ) -> Selected< WaveTrack >() ) {
double trackStart = track->GetStartTime(); double trackStart = track->GetStartTime();
double trackEnd = track->GetEndTime(); double trackEnd = track->GetEndTime();
double t0 = mEffectEqualization->mT0 < trackStart? trackStart: mEffectEqualization->mT0; double t0 = mEffectEqualization->mT0 < trackStart? trackStart: mEffectEqualization->mT0;
@ -380,7 +383,7 @@ bool EffectEqualization48x::TrackCompare()
auto iter2 = (SecondOutputTracks.Selected< const WaveTrack >()).first; auto iter2 = (SecondOutputTracks.Selected< const WaveTrack >()).first;
auto track2 = *iter2; auto track2 = *iter2;
for ( auto track : for ( auto track :
mEffectEqualization->mOutputTracks->Selected< const WaveTrack >() { mEffectEqualization->mOutputTracks->Selected< WaveTrack >() ) {
double trackStart = track->GetStartTime(); double trackStart = track->GetStartTime();
double trackEnd = track->GetEndTime(); double trackEnd = track->GetEndTime();
double t0 = mEffectEqualization->mT0 < trackStart? trackStart: mEffectEqualization->mT0; double t0 = mEffectEqualization->mT0 < trackStart? trackStart: mEffectEqualization->mT0;
@ -398,7 +401,8 @@ bool EffectEqualization48x::TrackCompare()
return bBreakLoop; // return !bBreakLoop ? return bBreakLoop; // return !bBreakLoop ?
} }
bool EffectEqualization48x::DeltaTrack(WaveTrack * t, WaveTrack * t2, sampleCount start, sampleCount len) bool EffectEqualization48x::DeltaTrack(
WaveTrack * t, const WaveTrack * t2, sampleCount start, sampleCount len)
{ {
auto trackBlockSize = t->GetMaxBlockSize(); auto trackBlockSize = t->GetMaxBlockSize();
@ -427,6 +431,8 @@ bool EffectEqualization48x::DeltaTrack(WaveTrack * t, WaveTrack * t2, sampleCoun
return true; return true;
} }
#include <wx/stopwatch.h>
bool EffectEqualization48x::Benchmark(EffectEqualization* effectEqualization) bool EffectEqualization48x::Benchmark(EffectEqualization* effectEqualization)
{ {
mEffectEqualization=effectEqualization; mEffectEqualization=effectEqualization;
@ -464,7 +470,7 @@ bool EffectEqualization48x::Benchmark(EffectEqualization* effectEqualization)
timer.Start(); timer.Start();
int count = 0; int count = 0;
for (auto track : for (auto track :
mEffectEqualization->mOutputTracks->Selected< WaveTrack >() { mEffectEqualization->mOutputTracks->Selected< WaveTrack >() ) {
double trackStart = track->GetStartTime(); double trackStart = track->GetStartTime();
double trackEnd = track->GetEndTime(); double trackEnd = track->GetEndTime();
double t0 = mEffectEqualization->mT0 < trackStart? trackStart: mEffectEqualization->mT0; double t0 = mEffectEqualization->mT0 < trackStart? trackStart: mEffectEqualization->mT0;
@ -493,7 +499,8 @@ bool EffectEqualization48x::Benchmark(EffectEqualization* effectEqualization)
wxTimeSpan tsDefaultThreaded(0, 0, 0, times[3]); wxTimeSpan tsDefaultThreaded(0, 0, 0, times[3]);
wxTimeSpan tsDefault(0, 0, 0, times[4]); wxTimeSpan tsDefault(0, 0, 0, times[4]);
Effect::MessageBox(wxString::Format(_("Benchmark times:\nOriginal: %s\nDefault Segmented: %s\nDefault Threaded: %s\nSSE: %s\nSSE Threaded: %s\n"),tsDefault.Format(wxT("%M:%S.%l")), mEffectEqualization->MessageBox(
wxString::Format(_("Benchmark times:\nOriginal: %s\nDefault Segmented: %s\nDefault Threaded: %s\nSSE: %s\nSSE Threaded: %s\n"),tsDefault.Format(wxT("%M:%S.%l")),
tsDefaultEnhanced.Format(wxT("%M:%S.%l")), tsDefaultThreaded.Format(wxT("%M:%S.%l")),tsSSE.Format(wxT("%M:%S.%l")),tsSSEThreaded.Format(wxT("%M:%S.%l")))); tsDefaultEnhanced.Format(wxT("%M:%S.%l")), tsDefaultThreaded.Format(wxT("%M:%S.%l")),tsSSE.Format(wxT("%M:%S.%l")),tsSSEThreaded.Format(wxT("%M:%S.%l"))));
return bBreakLoop; // return !bBreakLoop ? return bBreakLoop; // return !bBreakLoop ?
} }
@ -632,7 +639,9 @@ bool EffectEqualization48x::ProcessOne1x(int count, WaveTrack * t,
if(bigRuns == 0) if(bigRuns == 0)
singleProcessLength = len.as_size_t(); singleProcessLength = len.as_size_t();
else else
singleProcessLength=(mFilterSize>>1)*bigRuns + len%(bigRuns*(subBufferSize-mBlockSize)); singleProcessLength =
((mFilterSize>>1)*bigRuns + len%(bigRuns*(subBufferSize-mBlockSize)))
.as_size_t();
auto currentSample=start; auto currentSample=start;
bool bBreakLoop = false; bool bBreakLoop = false;
for(int bigRun=0;bigRun<bigRuns;bigRun++) for(int bigRun=0;bigRun<bigRuns;bigRun++)
@ -812,7 +821,9 @@ bool EffectEqualization48x::ProcessOne4x(int count, WaveTrack * t,
auto bigRuns = len/(subBufferSize-mBlockSize); auto bigRuns = len/(subBufferSize-mBlockSize);
int trackBlocksPerBig=subBufferSize/trackBlockSize; int trackBlocksPerBig=subBufferSize/trackBlockSize;
int trackLeftovers=subBufferSize-trackBlocksPerBig*trackBlockSize; int trackLeftovers=subBufferSize-trackBlocksPerBig*trackBlockSize;
size_t singleProcessLength=(mFilterSize>>1)*bigRuns + len%(bigRuns*(subBufferSize-mBlockSize)); size_t singleProcessLength =
((mFilterSize>>1)*bigRuns + len%(bigRuns*(subBufferSize-mBlockSize)))
.as_size_t();
auto currentSample=start; auto currentSample=start;
bool bBreakLoop = false; bool bBreakLoop = false;
@ -847,12 +858,14 @@ bool EffectEqualization48x::ProcessOne4x(int count, WaveTrack * t,
return bBreakLoop; return bBreakLoop;
} }
#include <wx/thread.h>
void *EQWorker::Entry() void *EQWorker::Entry()
{ {
while(!mExitLoop) { while(!mExitLoop) {
int i = 0; int i = 0;
{ {
wxMutexLocker locker( mMutex ); wxMutexLocker locker( *mMutex );
for(; i < mBufferInfoCount; i++) { for(; i < mBufferInfoCount; i++) {
if(mBufferInfoList[i].mBufferStatus==BufferReady) { // we found an unlocked ready buffer if(mBufferInfoList[i].mBufferStatus==BufferReady) { // we found an unlocked ready buffer
mBufferInfoList[i].mBufferStatus=BufferBusy; // we own it now mBufferInfoList[i].mBufferStatus=BufferBusy; // we own it now
@ -899,7 +912,9 @@ bool EffectEqualization48x::ProcessOne1x4xThreaded(int count, WaveTrack * t,
auto bigRuns = len/(subBufferSize-mBlockSize); auto bigRuns = len/(subBufferSize-mBlockSize);
int trackBlocksPerBig=subBufferSize/trackBlockSize; int trackBlocksPerBig=subBufferSize/trackBlockSize;
int trackLeftovers=subBufferSize-trackBlocksPerBig*trackBlockSize; int trackLeftovers=subBufferSize-trackBlocksPerBig*trackBlockSize;
size_t singleProcessLength=(mFilterSize>>1)*bigRuns + len%(bigRuns*(subBufferSize-mBlockSize)); size_t singleProcessLength =
((mFilterSize>>1)*bigRuns + len%(bigRuns*(subBufferSize-mBlockSize)))
.as_size_t();
auto currentSample=start; auto currentSample=start;
int bigBlocksRead=mWorkerDataCount, bigBlocksWritten=0; int bigBlocksRead=mWorkerDataCount, bigBlocksWritten=0;

View File

@ -17,6 +17,11 @@ Intrinsics (SSE/AVX) and Threaded Equalization
#include "../MemoryX.h" #include "../MemoryX.h"
#include <wx/thread.h> // to inherit
#include <audacity/Types.h>
class WaveTrack;
using fft_type = float;
#ifdef __AVX_ENABLED #ifdef __AVX_ENABLED
#define __MAXBUFFERCOUNT 8 #define __MAXBUFFERCOUNT 8
#else #else
@ -129,7 +134,7 @@ public:
private: private:
bool RunFunctionSelect(int flags, int count, WaveTrack * t, sampleCount start, sampleCount len); bool RunFunctionSelect(int flags, int count, WaveTrack * t, sampleCount start, sampleCount len);
bool TrackCompare(); bool TrackCompare();
bool DeltaTrack(WaveTrack * t, WaveTrack * t2, sampleCount start, sampleCount len); bool DeltaTrack(WaveTrack * t, const WaveTrack * t2, sampleCount start, sampleCount len);
bool AllocateBuffersWorkers(int nThreads); bool AllocateBuffersWorkers(int nThreads);
bool FreeBuffersWorkers(); bool FreeBuffersWorkers();