mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-18 00:50:05 +02:00
Use wxWeakRef to avoid dangling pointer
This commit is contained in:
parent
94b97f5c95
commit
12983e1685
@ -1210,7 +1210,6 @@ AudioIO::AudioIO()
|
|||||||
mUpdatingMeters = false;
|
mUpdatingMeters = false;
|
||||||
|
|
||||||
mOwningProject = NULL;
|
mOwningProject = NULL;
|
||||||
mInputMeter = NULL;
|
|
||||||
mOutputMeter = NULL;
|
mOutputMeter = NULL;
|
||||||
|
|
||||||
PaError err = Pa_Initialize();
|
PaError err = Pa_Initialize();
|
||||||
@ -1662,7 +1661,7 @@ bool AudioIO::StartPortAudioStream(double sampleRate,
|
|||||||
if (!mOwningProject)
|
if (!mOwningProject)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
mInputMeter = NULL;
|
mInputMeter.Release();
|
||||||
mOutputMeter = NULL;
|
mOutputMeter = NULL;
|
||||||
|
|
||||||
mLastPaError = paNoError;
|
mLastPaError = paNoError;
|
||||||
@ -1751,7 +1750,7 @@ bool AudioIO::StartPortAudioStream(double sampleRate,
|
|||||||
else
|
else
|
||||||
captureParameters.suggestedLatency = latencyDuration/1000.0;
|
captureParameters.suggestedLatency = latencyDuration/1000.0;
|
||||||
|
|
||||||
mInputMeter = mOwningProject->GetCaptureMeter();
|
SetCaptureMeter( mOwningProject, mOwningProject->GetCaptureMeter() );
|
||||||
}
|
}
|
||||||
|
|
||||||
SetMeters();
|
SetMeters();
|
||||||
@ -2479,11 +2478,13 @@ void AudioIO::SetCaptureMeter(AudacityProject *project, MeterPanel *meter)
|
|||||||
{
|
{
|
||||||
if (!mOwningProject || mOwningProject == project)
|
if (!mOwningProject || mOwningProject == project)
|
||||||
{
|
{
|
||||||
mInputMeter = meter;
|
if (meter)
|
||||||
if (mInputMeter)
|
|
||||||
{
|
{
|
||||||
|
mInputMeter = meter;
|
||||||
mInputMeter->Reset(mRate, true);
|
mInputMeter->Reset(mRate, true);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
mInputMeter.Release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2499,10 +2500,6 @@ void AudioIO::SetPlaybackMeter(AudacityProject *project, MeterPanel *meter)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MeterPanel * AudioIO::GetCaptureMeter(){
|
|
||||||
return mInputMeter;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioIO::SetMeters()
|
void AudioIO::SetMeters()
|
||||||
{
|
{
|
||||||
if (mInputMeter)
|
if (mInputMeter)
|
||||||
@ -2817,7 +2814,7 @@ void AudioIO::StopStream()
|
|||||||
if (pMixerBoard)
|
if (pMixerBoard)
|
||||||
pMixerBoard->ResetMeters(false);
|
pMixerBoard->ResetMeters(false);
|
||||||
|
|
||||||
mInputMeter = NULL;
|
mInputMeter.Release();
|
||||||
mOutputMeter = NULL;
|
mOutputMeter = NULL;
|
||||||
mOwningProject = NULL;
|
mOwningProject = NULL;
|
||||||
|
|
||||||
@ -4506,7 +4503,7 @@ double AudioIO::AILAGetLastDecisionTime() {
|
|||||||
void AudioIO::AILAProcess(double maxPeak) {
|
void AudioIO::AILAProcess(double maxPeak) {
|
||||||
AudacityProject *proj = GetActiveProject();
|
AudacityProject *proj = GetActiveProject();
|
||||||
if (proj && mAILAActive) {
|
if (proj && mAILAActive) {
|
||||||
if (mInputMeter->IsClipping()) {
|
if (mInputMeter && mInputMeter->IsClipping()) {
|
||||||
mAILAClipped = true;
|
mAILAClipped = true;
|
||||||
wxPrintf("clipped");
|
wxPrintf("clipped");
|
||||||
}
|
}
|
||||||
@ -4515,7 +4512,7 @@ void AudioIO::AILAProcess(double maxPeak) {
|
|||||||
|
|
||||||
if ((mAILATotalAnalysis == 0 || mAILAAnalysisCounter < mAILATotalAnalysis) && mTime - mAILALastStartTime >= mAILAAnalysisTime) {
|
if ((mAILATotalAnalysis == 0 || mAILAAnalysisCounter < mAILATotalAnalysis) && mTime - mAILALastStartTime >= mAILAAnalysisTime) {
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
mAILAMax = mInputMeter->ToLinearIfDB(mAILAMax);
|
mAILAMax = mInputMeter ? mInputMeter->ToLinearIfDB(mAILAMax) : 0.0;
|
||||||
double iv = (double) Px_GetInputVolume(mPortMixer);
|
double iv = (double) Px_GetInputVolume(mPortMixer);
|
||||||
unsigned short changetype = 0; //0 - no change, 1 - increase change, 2 - decrease change
|
unsigned short changetype = 0; //0 - no change, 1 - increase change, 2 - decrease change
|
||||||
wxPrintf("mAILAAnalysisCounter:%d\n", mAILAAnalysisCounter);
|
wxPrintf("mAILAAnalysisCounter:%d\n", mAILAAnalysisCounter);
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <wx/atomic.h>
|
#include <wx/atomic.h>
|
||||||
|
#include <wx/weakref.h>
|
||||||
|
|
||||||
#ifdef USE_MIDI
|
#ifdef USE_MIDI
|
||||||
|
|
||||||
@ -410,7 +411,6 @@ class AUDACITY_DLL_API AudioIO final {
|
|||||||
bool IsAvailable(AudacityProject *projecT);
|
bool IsAvailable(AudacityProject *projecT);
|
||||||
void SetCaptureMeter(AudacityProject *project, MeterPanel *meter);
|
void SetCaptureMeter(AudacityProject *project, MeterPanel *meter);
|
||||||
void SetPlaybackMeter(AudacityProject *project, MeterPanel *meter);
|
void SetPlaybackMeter(AudacityProject *project, MeterPanel *meter);
|
||||||
MeterPanel * GetCaptureMeter();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/** \brief Set the current VU meters - this should be done once after
|
/** \brief Set the current VU meters - this should be done once after
|
||||||
@ -694,7 +694,7 @@ private:
|
|||||||
PaError mLastPaError;
|
PaError mLastPaError;
|
||||||
|
|
||||||
AudacityProject *mOwningProject;
|
AudacityProject *mOwningProject;
|
||||||
MeterPanel *mInputMeter;
|
wxWeakRef<MeterPanel> mInputMeter{};
|
||||||
MeterPanel *mOutputMeter;
|
MeterPanel *mOutputMeter;
|
||||||
bool mUpdateMeters;
|
bool mUpdateMeters;
|
||||||
volatile bool mUpdatingMeters;
|
volatile bool mUpdatingMeters;
|
||||||
|
@ -367,12 +367,6 @@ MeterPanel::~MeterPanel()
|
|||||||
wxCommandEventHandler(MeterPanel::OnMeterPrefsUpdated),
|
wxCommandEventHandler(MeterPanel::OnMeterPrefsUpdated),
|
||||||
NULL,
|
NULL,
|
||||||
this);
|
this);
|
||||||
|
|
||||||
// LLL: This prevents a crash during termination if monitoring
|
|
||||||
// is active.
|
|
||||||
if (gAudioIO && gAudioIO->IsMonitoring())
|
|
||||||
if( gAudioIO->GetCaptureMeter() == this )
|
|
||||||
gAudioIO->StopStream();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MeterPanel::UpdatePrefs()
|
void MeterPanel::UpdatePrefs()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user