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;
};
}