Add Input Port meters for I/O Pre-Plugin outputs
This commit is contained in:
parent
cdf3b5209e
commit
5c85695362
@ -30,6 +30,7 @@
|
||||
#include "ardour/latent.h"
|
||||
#include "ardour/graphnode.h"
|
||||
#include "ardour/plugin.h"
|
||||
#include "ardour/port_manager.h"
|
||||
#include "ardour/session_object.h"
|
||||
#include "ardour/plug_insert_base.h"
|
||||
|
||||
@ -68,6 +69,11 @@ public:
|
||||
Gtkmm2ext::WindowProxy* window_proxy () const { return _window_proxy; }
|
||||
void set_window_proxy (Gtkmm2ext::WindowProxy* wp) { _window_proxy = wp; }
|
||||
|
||||
PortManager::AudioInputPorts audio_input_ports () const { return _audio_input_ports; }
|
||||
PortManager::MIDIInputPorts midi_input_ports () const { return _midi_input_ports; }
|
||||
|
||||
void reset_input_meters ();
|
||||
|
||||
/* Latent */
|
||||
samplecnt_t signal_latency () const;
|
||||
|
||||
@ -157,10 +163,14 @@ private:
|
||||
boost::shared_ptr<IO> _input;
|
||||
boost::shared_ptr<IO> _output;
|
||||
|
||||
PortManager::AudioInputPorts _audio_input_ports;
|
||||
PortManager::MIDIInputPorts _midi_input_ports;
|
||||
|
||||
Gtkmm2ext::WindowProxy* _window_proxy;
|
||||
|
||||
PBD::TimingStats _timing_stats;
|
||||
GATOMIC_QUAL gint _stat_reset;
|
||||
GATOMIC_QUAL gint _reset_meters;
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include "temporal/tempo.h"
|
||||
|
||||
#include "ardour/audioengine.h"
|
||||
#include "ardour/audio_buffer.h"
|
||||
#include "ardour/audio_port.h"
|
||||
#include "ardour/event_type_map.h"
|
||||
@ -48,6 +49,7 @@ IOPlug::IOPlug (Session& s, boost::shared_ptr<Plugin> p, bool pre)
|
||||
, _window_proxy (0)
|
||||
{
|
||||
g_atomic_int_set (&_stat_reset, 0);
|
||||
g_atomic_int_set (&_reset_meters, 0);
|
||||
|
||||
if (_plugin) {
|
||||
setup ();
|
||||
@ -67,7 +69,7 @@ IOPlug::~IOPlug ()
|
||||
std::string
|
||||
IOPlug::io_name (std::string const& n) const
|
||||
{
|
||||
return (string_compose ("%1/%2/%3", _("IO"), _pre ? _("Pre"): _("Post"), n.empty () ? name() : n));
|
||||
return (string_compose ("%1/%2/%3", _("IO"), _pre ? _("Pre"): _("Post"), n.empty () ? name () : n));
|
||||
}
|
||||
|
||||
std::string
|
||||
@ -381,6 +383,38 @@ IOPlug::ensure_io ()
|
||||
}
|
||||
|
||||
_bufs.ensure_buffers (ChanCount::max (_n_in, _n_out), _session.get_block_size ());
|
||||
|
||||
for (uint32_t i = 0; i < _n_in.n_audio (); ++i) {
|
||||
const auto& pd (_plugin->describe_io_port (DataType::AUDIO, true, i));
|
||||
std::string const pn = string_compose ("%1 %2 - %3", _("IO"), name (), pd.name);
|
||||
_input->audio (i)->set_pretty_name (pn);
|
||||
}
|
||||
for (uint32_t i = 0; i < _n_in.n_midi (); ++i) {
|
||||
const auto& pd (_plugin->describe_io_port (DataType::MIDI, true, i));
|
||||
std::string const pn = string_compose ("%1 %2 - %3", _("IO"), name (), pd.name);
|
||||
_input->midi (i)->set_pretty_name (pn);
|
||||
}
|
||||
for (uint32_t i = 0; i < _n_out.n_audio (); ++i) {
|
||||
const auto& pd (_plugin->describe_io_port (DataType::AUDIO, false, i));
|
||||
std::string const pn = string_compose ("%1 %2 - %3", _("IO"), name (), pd.name);
|
||||
_output->audio (i)->set_pretty_name (pn);
|
||||
}
|
||||
for (uint32_t i = 0; i < _n_out.n_midi (); ++i) {
|
||||
const auto& pd (_plugin->describe_io_port (DataType::MIDI, false, i));
|
||||
std::string const pn = string_compose ("%1 %2 - %3", _("IO"), name (), pd.name);
|
||||
_output->midi (i)->set_pretty_name (pn);
|
||||
}
|
||||
|
||||
if (_pre) {
|
||||
for (uint32_t i = 0; i < _n_out.n_audio (); ++i) {
|
||||
std::string const& n = AudioEngine::instance ()->make_port_name_non_relative (_output->audio (i)->name ());
|
||||
_audio_input_ports.insert (make_pair (n, PortManager::AudioInputPort (24288))); // 2^19 ~ 1MB / port
|
||||
}
|
||||
for (uint32_t i = 0; i < _n_out.n_midi (); ++i) {
|
||||
std::string const& n = AudioEngine::instance ()->make_port_name_non_relative (_output->midi (i)->name ());
|
||||
_midi_input_ports.insert (make_pair (n, PortManager::MIDIInputPort (32)));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -431,6 +465,28 @@ IOPlug::run (samplepos_t start, pframes_t n_samples)
|
||||
}
|
||||
|
||||
PortSet& ports (_output->ports());
|
||||
if (_pre) {
|
||||
const bool reset = g_atomic_int_compare_and_exchange (&_reset_meters, 1, 0);
|
||||
samplecnt_t const rate = _session.nominal_sample_rate ();
|
||||
|
||||
auto a = _audio_input_ports.begin ();
|
||||
auto m = _midi_input_ports.begin ();
|
||||
for (auto p = _bufs.audio_begin (); p != _bufs.audio_end (); ++p, ++a) {
|
||||
AudioBuffer const& ab (*p);
|
||||
PortManager::AudioInputPort& ai (a->second);
|
||||
ai.apply_falloff (n_samples, rate, reset);
|
||||
ai.process (ab.data (), n_samples, reset);
|
||||
}
|
||||
for (auto p = _bufs.midi_begin (); p != _bufs.midi_end (); ++p, ++m) {
|
||||
PortManager::MIDIInputPort& mi (m->second);
|
||||
MidiBuffer const& mb (*p);
|
||||
mi.apply_falloff (n_samples, rate, reset);
|
||||
for (MidiBuffer::const_iterator i = mb.begin (); i != mb.end (); ++i) {
|
||||
Evoral::Event<samplepos_t> ev (*i, false);
|
||||
mi.process_event (ev.buffer (), ev.size ());
|
||||
}
|
||||
}
|
||||
}
|
||||
for (PortSet::iterator i = ports.begin(); i != ports.end(); ++i) {
|
||||
i->flush_buffers (n_samples);
|
||||
}
|
||||
@ -444,6 +500,12 @@ IOPlug::run (samplepos_t start, pframes_t n_samples)
|
||||
_timing_stats.update ();
|
||||
}
|
||||
|
||||
void
|
||||
IOPlug::reset_input_meters ()
|
||||
{
|
||||
g_atomic_int_set (&_reset_meters, 1);
|
||||
}
|
||||
|
||||
bool
|
||||
IOPlug::get_stats (PBD::microseconds_t& min, PBD::microseconds_t& max, double& avg, double& dev) const
|
||||
{
|
||||
|
@ -112,6 +112,7 @@ Session::process (pframes_t nframes)
|
||||
|
||||
boost::shared_ptr<GraphChain> io_graph_chain = _io_graph_chain[0];
|
||||
if (io_graph_chain) {
|
||||
PortManager::falloff_cache_calc (nframes, _nominal_sample_rate);
|
||||
_process_graph->process_io_plugs (io_graph_chain, nframes, 0);
|
||||
io_graph_chain.reset (); /* drop reference */
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user