towards export latency compensation
This commit is contained in:
parent
0a52b325f4
commit
a4a246b41d
@ -1266,6 +1266,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
|
||||
bool _exporting;
|
||||
bool _export_rolling;
|
||||
framepos_t _export_preroll;
|
||||
framepos_t _export_latency;
|
||||
|
||||
boost::shared_ptr<ExportHandler> export_handler;
|
||||
boost::shared_ptr<ExportStatus> export_status;
|
||||
|
@ -213,6 +213,7 @@ Session::Session (AudioEngine &eng,
|
||||
, _exporting (false)
|
||||
, _export_rolling (false)
|
||||
, _export_preroll (0)
|
||||
, _export_latency (0)
|
||||
, _pre_export_mmc_enabled (false)
|
||||
, _name (snapshot_name)
|
||||
, _is_new (true)
|
||||
|
@ -111,6 +111,21 @@ Session::start_audio_export (framepos_t position)
|
||||
}
|
||||
|
||||
_export_preroll = Config->get_export_preroll() * nominal_frame_rate ();
|
||||
if (_export_preroll == 0) {
|
||||
// must be > 0 so that transport is started in sync.
|
||||
_export_preroll = 1;
|
||||
}
|
||||
|
||||
/* "worst_track_latency" is the correct value for stem-exports
|
||||
* see to Route::add_export_point(),
|
||||
*
|
||||
* for master-bus export, we'd need to add the master's latency.
|
||||
* or actually longest-total-session-latency.
|
||||
*
|
||||
* We can't use worst_playback_latency because that includes
|
||||
* includes external latencies and would overcompensate.
|
||||
*/
|
||||
_export_latency = worst_track_latency ();
|
||||
|
||||
/* We're about to call Track::seek, so the butler must have finished everything
|
||||
up otherwise it could be doing do_refill in its thread while we are doing
|
||||
@ -212,9 +227,25 @@ Session::process_export_fw (pframes_t nframes)
|
||||
butler_transport_work ();
|
||||
g_atomic_int_set (&_butler->should_do_transport_work, 0);
|
||||
post_transport ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (_export_latency > 0) {
|
||||
framepos_t remain = std::min ((framepos_t)nframes, _export_latency);
|
||||
|
||||
_engine.main_thread()->get_buffers ();
|
||||
process_without_events (remain);
|
||||
_engine.main_thread()->drop_buffers ();
|
||||
|
||||
_export_latency -= remain;
|
||||
nframes -= remain;
|
||||
|
||||
if (nframes == 0) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
_engine.main_thread()->get_buffers ();
|
||||
process_export (nframes);
|
||||
_engine.main_thread()->drop_buffers ();
|
||||
|
Loading…
Reference in New Issue
Block a user