AU: request offline processing
This commit is contained in:
parent
35cb60c2dc
commit
8c4819e588
@ -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<CAAudioUnit> unit;
|
||||
|
||||
bool initialized;
|
||||
bool process_offline;
|
||||
int32_t input_channels;
|
||||
int32_t output_channels;
|
||||
std::vector<std::pair<int,int> > io_configs;
|
||||
|
@ -360,6 +360,7 @@ AUPlugin::AUPlugin (AudioEngine& engine, Session& session, std::shared_ptr<CACom
|
||||
, comp (_comp)
|
||||
, unit (new CAAudioUnit)
|
||||
, initialized (false)
|
||||
, process_offline (false)
|
||||
, _last_nframes (0)
|
||||
, _requires_fixed_size_buffers (false)
|
||||
, buffers (0)
|
||||
@ -401,6 +402,7 @@ AUPlugin::AUPlugin (const AUPlugin& other)
|
||||
, comp (other.get_comp())
|
||||
, unit (new CAAudioUnit)
|
||||
, initialized (false)
|
||||
, process_offline (false)
|
||||
, _last_nframes (0)
|
||||
, _requires_fixed_size_buffers (false)
|
||||
, buffers (0)
|
||||
@ -869,6 +871,33 @@ AUPlugin::requires_fixed_size_buffers() const
|
||||
return _requires_fixed_size_buffers;
|
||||
}
|
||||
|
||||
void
|
||||
AUPlugin::set_non_realtime (bool yn)
|
||||
{
|
||||
if (process_offline == yn) {
|
||||
return;
|
||||
}
|
||||
process_offline = yn;
|
||||
|
||||
bool was_initialized = initialized;
|
||||
if (initialized) {
|
||||
deactivate ();
|
||||
}
|
||||
|
||||
OSErr err;
|
||||
UInt32 isOffline = yn ? 1 : 0;
|
||||
if ((err = unit->SetProperty (/*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 ();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user