1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-05-05 14:18:53 +02:00

More cautions in SBSMSEffect.cpp...

... The narrowings from sampleCount to long might be fixed, but it would
require changes in lib-src
This commit is contained in:
Paul Licameli 2016-08-24 13:27:54 -04:00
parent 5ef9b81a94
commit 2949a080d2

View File

@ -280,7 +280,7 @@ bool EffectSBSMS::Process()
// SBSMS has a fixed sample rate - we just convert to its sample rate and then convert back // SBSMS has a fixed sample rate - we just convert to its sample rate and then convert back
float srTrack = leftTrack->GetRate(); float srTrack = leftTrack->GetRate();
float srProcess = bLinkRatePitch?srTrack:44100.0; float srProcess = bLinkRatePitch ? srTrack : 44100.0;
// the resampler needs a callback to supply its samples // the resampler needs a callback to supply its samples
ResampleBuf rb; ResampleBuf rb;
@ -301,9 +301,6 @@ bool EffectSBSMS::Process()
SlideType outSlideType; SlideType outSlideType;
SBSMSResampleCB outResampleCB; SBSMSResampleCB outResampleCB;
sampleCount processPresamples = 0;
sampleCount trackPresamples = 0;
if(bLinkRatePitch) { if(bLinkRatePitch) {
rb.bPitch = true; rb.bPitch = true;
outSlideType = rateSlideType; outSlideType = rateSlideType;
@ -327,10 +324,18 @@ bool EffectSBSMS::Process()
rb.SBSMSBlockSize = rb.sbsms->getInputFrameSize(); rb.SBSMSBlockSize = rb.sbsms->getInputFrameSize();
rb.SBSMSBuf = (audio*)calloc(rb.SBSMSBlockSize,sizeof(audio)); rb.SBSMSBuf = (audio*)calloc(rb.SBSMSBlockSize,sizeof(audio));
processPresamples = wxMin(rb.quality->getMaxPresamples(), // Note: width of getMaxPresamples() is only long. Widen it
(long)((float)(start-trackStart)*(srProcess/srTrack))); decltype(start) processPresamples = rb.quality->getMaxPresamples();
trackPresamples = wxMin(start-trackStart, processPresamples =
(long)((float)(processPresamples)*(srTrack/srProcess))); std::min(processPresamples,
decltype(processPresamples)
((float)(start-trackStart)*(srProcess/srTrack)));
auto trackPresamples = start - trackStart;
trackPresamples =
std::min(trackPresamples,
decltype(trackPresamples)
((float)(processPresamples)*(srTrack/srProcess)));
rb.offset = start - trackPresamples; rb.offset = start - trackPresamples;
rb.end = trackEnd; rb.end = trackEnd;
rb.iface = std::make_unique<SBSMSEffectInterface> rb.iface = std::make_unique<SBSMSEffectInterface>
@ -340,7 +345,9 @@ bool EffectSBSMS::Process()
// The argument type is only long! // The argument type is only long!
static_cast<long> ( static_cast<size_t> ( static_cast<long> ( static_cast<size_t> (
samplesToProcess ) ), samplesToProcess ) ),
processPresamples, // This argument type is also only long!
static_cast<long> ( static_cast<size_t> (
processPresamples ) ),
rb.quality.get()); rb.quality.get());
} }