Browse Source

ARA: Fix plugins in Logic by making the DocumentController not inherit from Timer

A Timer will only be created for the analysis task when necessary. This
ensures that the ScopedJuceInitialiser_GUI member inside the
DocumentController is initialised before a Timer instance is even
created.
v7.0.12
attila 1 year ago
parent
commit
00e96e7779
1 changed files with 33 additions and 11 deletions
  1. +33
    -11
      modules/juce_audio_processors/utilities/ARA/juce_ARADocumentController.cpp

+ 33
- 11
modules/juce_audio_processors/utilities/ARA/juce_ARADocumentController.cpp View File

@@ -26,8 +26,31 @@
namespace juce
{
class ARADocumentControllerSpecialisation::ARADocumentControllerImpl : public ARADocumentController,
private juce::Timer
class SimpleTimer final : private Timer
{
public:
SimpleTimer (int frequencyHz, std::function<void()> callbackIn)
: callback (std::move (callbackIn))
{
jassert (callback);
startTimerHz (frequencyHz);
}
~SimpleTimer() override
{
stopTimer();
}
private:
void timerCallback() override
{
callback();
}
std::function<void()> callback;
};
class ARADocumentControllerSpecialisation::ARADocumentControllerImpl : public ARADocumentController
{
public:
ARADocumentControllerImpl (const ARA::PlugIn::PlugInEntry* entry,
@@ -204,10 +227,6 @@ protected:
void didUpdatePlaybackRegionProperties (ARA::PlugIn::PlaybackRegion* playbackRegion) noexcept override;
void willDestroyPlaybackRegion (ARA::PlugIn::PlaybackRegion* playbackRegion) noexcept override;
//==============================================================================
// juce::Timer overrides
void timerCallback() override;
public:
//==============================================================================
/** @internal */
@@ -248,6 +267,9 @@ private:
std::atomic<bool> internalAnalysisProgressIsSynced { true };
ScopedJuceInitialiser_GUI libraryInitialiser;
int activeAudioSourcesCount = 0;
std::optional<SimpleTimer> analysisTimer;
void analysisTimerCallback();
//==============================================================================
template <typename ModelObject, typename Function, typename... Ts>
@@ -363,10 +385,10 @@ void ARADocumentControllerSpecialisation::ARADocumentControllerImpl::didEndEditi
{
notifyListeners (&ARADocument::Listener::didEndEditing, static_cast<ARADocument*> (getDocument()));
if (isTimerRunning() && (activeAudioSourcesCount == 0))
stopTimer();
else if (! isTimerRunning() && (activeAudioSourcesCount > 0))
startTimerHz (20);
if (activeAudioSourcesCount == 0)
analysisTimer.reset();
else if (! analysisTimer.has_value() && (activeAudioSourcesCount > 0))
analysisTimer.emplace (20, [this] { analysisTimerCallback(); });
}
void ARADocumentControllerSpecialisation::ARADocumentControllerImpl::willNotifyModelUpdates() noexcept
@@ -760,7 +782,7 @@ namespace ModelUpdateControllerProgressAdapter
}
}
void ARADocumentControllerSpecialisation::ARADocumentControllerImpl::timerCallback()
void ARADocumentControllerSpecialisation::ARADocumentControllerImpl::analysisTimerCallback()
{
if (! internalAnalysisProgressIsSynced.exchange (true, std::memory_order_release))
for (auto& audioSource : getDocument()->getAudioSources())


Loading…
Cancel
Save