13
0

Also flush buffers of the inner delivery of inserts

When flushing the buffers of Delivery processors owned by a Route/Track,
inner deliveries of PortInsert processors were missed since PortInsert
is not a Delivery subclass, but rather owns a Delivery as a private
member. Expose a flush_buffers() for PortInsert and call it too.

This is correct since (external) Send is a Delivery subclass, so that
just makes the send part of inserts behave as external sends do.
This commit is contained in:
Julien "_FrnchFrgg_" RIVAUD 2016-07-15 01:51:55 +02:00 committed by Paul Davis
parent 8af589b322
commit 9ba6e938d8
2 changed files with 10 additions and 0 deletions

View File

@ -26,6 +26,7 @@
#include "ardour/ardour.h"
#include "ardour/io_processor.h"
#include "ardour/delivery.h"
#include "ardour/libardour_visibility.h"
#include "ardour/types.h"
@ -54,6 +55,10 @@ class LIBARDOUR_API PortInsert : public IOProcessor
void run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, double speed, pframes_t nframes, bool);
void flush_buffers (framecnt_t nframes) {
_out->flush_buffers (nframes);
}
framecnt_t signal_latency () const;
bool set_name (const std::string& name);

View File

@ -3398,6 +3398,11 @@ Route::flush_processor_buffers_locked (framecnt_t nframes)
boost::shared_ptr<Delivery> d = boost::dynamic_pointer_cast<Delivery> (*i);
if (d) {
d->flush_buffers (nframes);
} else {
boost::shared_ptr<PortInsert> p = boost::dynamic_pointer_cast<PortInsert> (*i);
if (p) {
p->flush_buffers (nframes);
}
}
}
}