From 5c18e64616e7ae5f6e65241f80a9ef9db8a02ccf Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 18 May 2022 21:06:45 +0200 Subject: [PATCH] Fix I/O Plugin meter without session - amend c10c3ed6 The RecoderUI can show device input meters as long as a backend is running regardless of a session. I/O Plugins are however part of a specific session. --- gtk2_ardour/recorder_ui.cc | 47 ++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/gtk2_ardour/recorder_ui.cc b/gtk2_ardour/recorder_ui.cc index c52d24c4a7..62a611fa18 100644 --- a/gtk2_ardour/recorder_ui.cc +++ b/gtk2_ardour/recorder_ui.cc @@ -785,7 +785,10 @@ bool RecorderUI::update_meters () { PortManager::AudioInputPorts const aip (AudioEngine::instance ()->audio_input_ports ()); - boost::shared_ptr iop (_session->io_plugs ()); + boost::shared_ptr iop; + if (_session) { + iop = _session->io_plugs (); + } /* scope data needs to be read continuously */ for (PortManager::AudioInputPorts::const_iterator i = aip.begin (); i != aip.end (); ++i) { @@ -795,12 +798,14 @@ RecorderUI::update_meters () } } - for (auto& p : *iop) { - PortManager::AudioInputPorts const& aip (p->audio_input_ports ()); - for (auto i = aip.begin (); i != aip.end (); ++i) { - InputPortMap::iterator im = _input_ports.find (i->first); - if (im != _input_ports.end()) { - im->second->update (*(i->second.scope)); + if (iop) { + for (auto const& p : *iop) { + PortManager::AudioInputPorts const& aip (p->audio_input_ports ()); + for (auto i = aip.begin (); i != aip.end (); ++i) { + InputPortMap::iterator im = _input_ports.find (i->first); + if (im != _input_ports.end()) { + im->second->update (*(i->second.scope)); + } } } } @@ -825,20 +830,22 @@ RecorderUI::update_meters () } } - for (auto& p : *iop) { - PortManager::AudioInputPorts const& aip (p->audio_input_ports ()); - PortManager::MIDIInputPorts const& mip (p->midi_input_ports ()); - for (auto i = aip.begin (); i != aip.end (); ++i) { - InputPortMap::iterator im = _input_ports.find (i->first); - if (im != _input_ports.end()) { - im->second->update (accurate_coefficient_to_dB (i->second.meter->level), accurate_coefficient_to_dB (i->second.meter->peak)); + if (iop) { + for (auto const& p : *iop) { + PortManager::AudioInputPorts const& aip (p->audio_input_ports ()); + PortManager::MIDIInputPorts const& mip (p->midi_input_ports ()); + for (auto i = aip.begin (); i != aip.end (); ++i) { + InputPortMap::iterator im = _input_ports.find (i->first); + if (im != _input_ports.end()) { + im->second->update (accurate_coefficient_to_dB (i->second.meter->level), accurate_coefficient_to_dB (i->second.meter->peak)); + } } - } - for (PortManager::MIDIInputPorts::const_iterator i = mip.begin (); i != mip.end (); ++i) { - InputPortMap::iterator im = _input_ports.find (i->first); - if (im != _input_ports.end()) { - im->second->update ((float const*)i->second.meter->chn_active); - im->second->update (*(i->second.monitor)); + for (PortManager::MIDIInputPorts::const_iterator i = mip.begin (); i != mip.end (); ++i) { + InputPortMap::iterator im = _input_ports.find (i->first); + if (im != _input_ports.end()) { + im->second->update ((float const*)i->second.meter->chn_active); + im->second->update (*(i->second.monitor)); + } } } }