major design changes: use glib event loop for MIDI thread/UI; rework design of BaseUI...
[ardour.git] / libs / ardour / ardour / meter.h
index be8472b170f52e8a0161dbaac4d358214cd89884..ae0a1672dbf59609a3fe358a1b911146e979807e 100644 (file)
@@ -41,7 +41,7 @@ class Metering {
 
   private:
        /* this object is not meant to be instantiated */
-       virtual void foo() = 0;
+       Metering();
 
        static Glib::StaticMutex    m_meter_signal_lock;
 };
@@ -53,18 +53,28 @@ public:
        PeakMeter(Session& s) : Processor(s, "Meter") {}
        PeakMeter(Session&s, const XMLNode& node);
 
-       bool visible() const;
-
        void meter();
-
        void reset ();
        void reset_max ();
 
        bool can_support_io_configuration (const ChanCount& in, ChanCount& out) const;
        bool configure_io (ChanCount in, ChanCount out);
+       
+       /* special method for meter, to ensure that it can always handle the maximum
+          number of streams in the route, no matter where we put it.
+       */
+
+       void reset_max_channels (const ChanCount&);
+
+       /* tell the meter than no matter how many channels it can handle,
+          `in' is the number it is actually going be handling from
+          now on.
+       */
+
+       void reflect_inputs (const ChanCount& in);
 
        /** Compute peaks */
-       void run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes);
+       void run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nframes_t nframes, bool);
 
        float peak_power (uint32_t n) {
                if (n < _visible_peak_power.size()) {
@@ -83,10 +93,12 @@ public:
        }
 
        XMLNode& state (bool full);
-
+       
 private:
        friend class IO;
-
+       
+       uint32_t current_meters;
+       
        std::vector<float> _peak_power;
        std::vector<float> _visible_peak_power;
        std::vector<float> _max_peak_power;