fix metering states 34, 38, 49, 50, 53 and 54
authorRobin Gareus <robin@gareus.org>
Tue, 16 Jul 2013 17:37:36 +0000 (19:37 +0200)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 8 Aug 2013 19:23:10 +0000 (15:23 -0400)
for state descriptions see
http://www.oofus.co.uk/ardour/Ardour3MonitorModesV3.pdf

libs/ardour/io.cc
libs/ardour/track.cc

index cdb8a4693cbb39cb0cdd5a0f0c7bf875b4bc7a69..21fdca6e96271520b633c6b42be9acb2f862474c 100644 (file)
@@ -1639,7 +1639,9 @@ IO::process_input (boost::shared_ptr<Processor> proc, framepos_t start_frame, fr
        }
 
        _buffers.get_jack_port_addresses (_ports, nframes);
-       proc->run (_buffers, start_frame, end_frame, nframes, true);
+       if (proc) {
+               proc->run (_buffers, start_frame, end_frame, nframes, true);
+       }
 }
 
 void
index d2c9b1deb5e463eec5c7fe21a0f2b79139ed9ee9..d4c095d738f51a25afcf3c1fb19824c874eca944 100644 (file)
@@ -408,8 +408,23 @@ Track::no_roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame,
        if (be_silent) {
 
                if (_meter_point == MeterInput) {
-                       /* still need input monitoring */
-                       _input->process_input (_meter, start_frame, end_frame, nframes);
+                       /* still need input monitoring and metering */
+
+                       bool const track_rec = _diskstream->record_enabled ();
+                       bool const auto_input = _session.config.get_auto_input ();
+                       bool const software_monitor = Config->get_monitoring_model() == SoftwareMonitoring;
+                       bool const tape_machine_mode = Config->get_tape_machine_mode ();
+
+                       if (!software_monitor && tape_machine_mode && !track_rec) {
+                               _meter->reset();
+                               _input->process_input (boost::shared_ptr<Processor>(), start_frame, end_frame, nframes);
+                       }
+                       else if (!software_monitor && !tape_machine_mode && !track_rec && !auto_input) {
+                               _meter->reset();
+                               _input->process_input (boost::shared_ptr<Processor>(), start_frame, end_frame, nframes);
+                       } else {
+                               _input->process_input (_meter, start_frame, end_frame, nframes);
+                       }
                }
 
                passthru_silence (start_frame, end_frame, nframes, 0);