#include "evoral/Curve.hpp"
#include "ardour/audio_buffer.h"
-#include "ardour/audio_buffer.h"
-#include "ardour/automatable.h"
#include "ardour/buffer_set.h"
#include "ardour/debug.h"
-#include "ardour/pannable.h"
#include "ardour/panner.h"
#include "ardour/panner_manager.h"
#include "ardour/panner_shell.h"
-#include "ardour/runtime_functions.h"
#include "ardour/session.h"
-#include "ardour/utils.h"
+#include "ardour/speakers.h"
#include "i18n.h"
PannerShell::~PannerShell ()
{
- DEBUG_TRACE(DEBUG::Destruction, string_compose ("panner shell for %1 destructor, pannable is %2\n", _name, _pannable));
+ DEBUG_TRACE(DEBUG::Destruction, string_compose ("panner shell %3 for %1 destructor, panner is %4, pannable is %2\n", _name, _pannable, this, _panner));
}
void
}
Panner* p = pi->descriptor.factory (_pannable, speakers);
- boost_debug_shared_ptr_mark_interesting (p, "Panner");
+ // boost_debug_shared_ptr_mark_interesting (p, "Panner");
_panner.reset (p);
_panner->configure_io (in, out);
}
_panner.reset ();
-
+
for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
if ((*niter)->name() == X_("Panner")) {
void
PannerShell::run (BufferSet& inbufs, BufferSet& outbufs, framepos_t start_frame, framepos_t end_frame, pframes_t nframes)
{
+ if (inbufs.count().n_audio() == 0) {
+ /* Input has no audio buffers (e.g. Aux Send in a MIDI track at a
+ point with no audio because there is no preceding instrument)
+ */
+ outbufs.silence(nframes, 0);
+ return;
+ }
+
if (outbufs.count().n_audio() == 0) {
// Failing to deliver audio we were asked to deliver is a bug
assert(inbufs.count().n_audio() == 0);