From 8c4819e58830adc85a831a38dbec54c682d9b348 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 15 Aug 2024 17:52:48 +0200 Subject: [PATCH] AU: request offline processing --- libs/ardour/ardour/audio_unit.h | 2 ++ libs/ardour/audio_unit.cc | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/libs/ardour/ardour/audio_unit.h b/libs/ardour/ardour/audio_unit.h index 757a771282..6ce63b00c9 100644 --- a/libs/ardour/ardour/audio_unit.h +++ b/libs/ardour/ardour/audio_unit.h @@ -81,6 +81,7 @@ class LIBARDOUR_API AUPlugin : public ARDOUR::Plugin void deactivate (); void flush (); int set_block_size (pframes_t nframes); + void set_non_realtime (bool); int connect_and_run (BufferSet& bufs, samplepos_t start, samplepos_t end, double speed, @@ -166,6 +167,7 @@ class LIBARDOUR_API AUPlugin : public ARDOUR::Plugin std::shared_ptr unit; bool initialized; + bool process_offline; int32_t input_channels; int32_t output_channels; std::vector > io_configs; diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc index 781a4e8783..f94f7a1be9 100644 --- a/libs/ardour/audio_unit.cc +++ b/libs/ardour/audio_unit.cc @@ -360,6 +360,7 @@ AUPlugin::AUPlugin (AudioEngine& engine, Session& session, std::shared_ptrSetProperty (/*kAudioUnitProperty_OfflineRender*/ 37, kAudioUnitScope_Global, 0, &isOffline, sizeof (isOffline))) != noErr) { + info << string_compose (_("AU: cannot set offline rendering(err = %1)"), err) << endmsg; + } + if (yn) { + UInt32 numSamples = _session.get_block_size(); + unit->SetProperty (/*kAudioUnitOfflineProperty_InputSize*/ 3020, kAudioUnitScope_Global, 0, &numSamples, sizeof(numSamples)); + } + + if (was_initialized) { + activate (); + } +} int AUPlugin::set_block_size (pframes_t nframes) @@ -888,6 +917,10 @@ AUPlugin::set_block_size (pframes_t nframes) return -1; } + if (process_offline) { + unit->SetProperty (/*kAudioUnitOfflineProperty_InputSize*/ 3020, kAudioUnitScope_Global, 0, &numSamples, sizeof(numSamples)); + } + if (was_initialized) { activate (); }