towards export latency compensation
[ardour.git] / libs / ardour / ardour / unknown_processor.h
old mode 100755 (executable)
new mode 100644 (file)
index 8e079c4..170be38
 
 namespace ARDOUR {
 
-class UnknownProcessor : public Processor
+/** A stub Processor that can be used in place of a `real' one that cannot be
+ *  created for some reason; usually because it requires a plugin which is not
+ *  present.  UnknownProcessors are special-cased in a few places, notably
+ *  in route configuration and signal processing, so that on encountering them
+ *  configuration or processing stops.
+ *
+ *  When a Processor is missing from a Route, the following processors cannot
+ *  be configured, as the missing Processor's output port configuration is
+ *  unknown.
+ *
+ *  The main utility of the UnknownProcessor is that it allows state
+ *  to be preserved, so that, for example, loading and re-saving a
+ *  session on a machine without a particular plugin will not corrupt
+ *  the session.
+ */
+class LIBARDOUR_API UnknownProcessor : public Processor
 {
 public:
        UnknownProcessor (Session &, XMLNode const &);
+       virtual ~UnknownProcessor ();
 
-       bool display_to_user () const {
-               return false;
-       }
+       bool can_support_io_configuration (const ChanCount &, ChanCount &);
+       void run (BufferSet& /*bufs*/, framepos_t /*start_frame*/, framepos_t /*end_frame*/, double /*speed*/, pframes_t /*nframes*/, bool /*result_required*/);
 
-       bool can_support_io_configuration (const ChanCount &, ChanCount &) const {
-               return false;
-       }
-       
        XMLNode & state (bool);
 
 private:
        XMLNode _state;
+       bool      have_ioconfig;
+       ChanCount *saved_input;
+       ChanCount *saved_output;
 };
 
 }