PBD::Signal0<void> AlignmentStyleChanged;
void set_input_latency (framecnt_t);
- framecnt_t input_latency () const { return _input_latency; }
bool configure_io (ChanCount in, ChanCount out);
CaptureInfos capture_info;
private:
- framecnt_t _input_latency;
gint _record_enabled;
gint _record_safe;
framepos_t capture_start_frame;
virtual framecnt_t signal_latency() const { return 0; }
+ virtual void set_input_latency (framecnt_t);
+ framecnt_t input_latency () const { return _input_latency; }
+
virtual int set_block_size (pframes_t /*nframes*/) { return 0; }
virtual bool requires_fixed_sized_buffers() const { return false; }
ProcessorWindowProxy *_window_proxy;
PluginPinWindowProxy *_pinmgr_proxy;
SessionObject* _owner;
+ framecnt_t _input_latency;
};
} // namespace ARDOUR
DiskWriter::DiskWriter (Session& s, string const & str, DiskIOProcessor::Flag f)
: DiskIOProcessor (s, str, f)
- , _input_latency (0)
, _record_enabled (0)
, _record_safe (0)
, capture_start_frame (0)
void
DiskWriter::set_input_latency (framecnt_t l)
{
- _input_latency = l;
+ Processor::set_input_latency (l);
+ set_capture_offset ();
}
void
break;
}
- DEBUG_TRACE (DEBUG::CaptureAlignment, string_compose ("%1: using IO latency, capture offset set to %2 with style = %3\n", name(), _capture_offset, enum_2_string (_alignment_style)));
+ DEBUG_TRACE (DEBUG::CaptureAlignment, string_compose ("%1: using input latency %4, capture offset set to %2 with style = %3\n", name(), _capture_offset, enum_2_string (_alignment_style), _input_latency));
}
if ((a != _alignment_style) || force) {
_alignment_style = a;
- cerr << name() << " using align style " << enum_2_string (_alignment_style) << endl;
set_capture_offset ();
AlignmentStyleChanged ();
}
, _window_proxy (0)
, _pinmgr_proxy (0)
, _owner (0)
+ , _input_latency (0)
{
}
, _window_proxy (0)
, _pinmgr_proxy (0)
, _owner (0)
+ , _input_latency (0)
{
}
{
return _owner;
}
+
+void
+Processor::set_input_latency (framecnt_t cnt)
+{
+ _input_latency = cnt;
+}
+
// TODO check for a potential ReaderLock after ReaderLock ??
Glib::Threads::RWLock::ReaderLock lr (_processor_lock);
+ framecnt_t chain_latency = _input->latency ();
+
list< pair<ChanCount,ChanCount> >::iterator c = configuration.begin();
for (ProcessorList::iterator p = _processors.begin(); p != _processors.end(); ++p, ++c) {
lm->acquire ();
return -1;
}
+
+ (*p)->set_input_latency (chain_latency);
+ chain_latency += (*p)->signal_latency ();
+
processor_max_streams = ChanCount::max(processor_max_streams, c->first);
processor_max_streams = ChanCount::max(processor_max_streams, c->second);