From 9ba6e938d8f7d61bc747ed5e9a102638bb1a8eb1 Mon Sep 17 00:00:00 2001 From: "Julien \"_FrnchFrgg_\" RIVAUD" Date: Fri, 15 Jul 2016 01:51:55 +0200 Subject: 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. --- libs/ardour/ardour/port_insert.h | 5 +++++ libs/ardour/route.cc | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/libs/ardour/ardour/port_insert.h b/libs/ardour/ardour/port_insert.h index fee1f4694c..0b1b3fbc00 100644 --- a/libs/ardour/ardour/port_insert.h +++ b/libs/ardour/ardour/port_insert.h @@ -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); diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index cd670df02e..1e1be37d9f 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -3398,6 +3398,11 @@ Route::flush_processor_buffers_locked (framecnt_t nframes) boost::shared_ptr d = boost::dynamic_pointer_cast (*i); if (d) { d->flush_buffers (nframes); + } else { + boost::shared_ptr p = boost::dynamic_pointer_cast (*i); + if (p) { + p->flush_buffers (nframes); + } } } } -- cgit v1.2.3