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 deactivate ();
|
||||||
void flush ();
|
void flush ();
|
||||||
int set_block_size (pframes_t nframes);
|
int set_block_size (pframes_t nframes);
|
||||||
|
void set_non_realtime (bool);
|
||||||
|
|
||||||
int connect_and_run (BufferSet& bufs,
|
int connect_and_run (BufferSet& bufs,
|
||||||
samplepos_t start, samplepos_t end, double speed,
|
samplepos_t start, samplepos_t end, double speed,
|
||||||
@ -166,6 +167,7 @@ class LIBARDOUR_API AUPlugin : public ARDOUR::Plugin
|
|||||||
std::shared_ptr<CAAudioUnit> unit;
|
std::shared_ptr<CAAudioUnit> unit;
|
||||||
|
|
||||||
bool initialized;
|
bool initialized;
|
||||||
|
bool process_offline;
|
||||||
int32_t input_channels;
|
int32_t input_channels;
|
||||||
int32_t output_channels;
|
int32_t output_channels;
|
||||||
std::vector<std::pair<int,int> > io_configs;
|
std::vector<std::pair<int,int> > io_configs;
|
||||||
|
@ -360,6 +360,7 @@ AUPlugin::AUPlugin (AudioEngine& engine, Session& session, std::shared_ptr<CACom
|
|||||||
, comp (_comp)
|
, comp (_comp)
|
||||||
, unit (new CAAudioUnit)
|
, unit (new CAAudioUnit)
|
||||||
, initialized (false)
|
, initialized (false)
|
||||||
|
, process_offline (false)
|
||||||
, _last_nframes (0)
|
, _last_nframes (0)
|
||||||
, _requires_fixed_size_buffers (false)
|
, _requires_fixed_size_buffers (false)
|
||||||
, buffers (0)
|
, buffers (0)
|
||||||
@ -401,6 +402,7 @@ AUPlugin::AUPlugin (const AUPlugin& other)
|
|||||||
, comp (other.get_comp())
|
, comp (other.get_comp())
|
||||||
, unit (new CAAudioUnit)
|
, unit (new CAAudioUnit)
|
||||||
, initialized (false)
|
, initialized (false)
|
||||||
|
, process_offline (false)
|
||||||
, _last_nframes (0)
|
, _last_nframes (0)
|
||||||
, _requires_fixed_size_buffers (false)
|
, _requires_fixed_size_buffers (false)
|
||||||
, buffers (0)
|
, buffers (0)
|
||||||
@ -869,6 +871,33 @@ AUPlugin::requires_fixed_size_buffers() const
|
|||||||
return _requires_fixed_size_buffers;
|
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
|
int
|
||||||
AUPlugin::set_block_size (pframes_t nframes)
|
AUPlugin::set_block_size (pframes_t nframes)
|
||||||
@ -888,6 +917,10 @@ AUPlugin::set_block_size (pframes_t nframes)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (process_offline) {
|
||||||
|
unit->SetProperty (/*kAudioUnitOfflineProperty_InputSize*/ 3020, kAudioUnitScope_Global, 0, &numSamples, sizeof(numSamples));
|
||||||
|
}
|
||||||
|
|
||||||
if (was_initialized) {
|
if (was_initialized) {
|
||||||
activate ();
|
activate ();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user