Remove frame conversion for MidiRegionView::note_in_region_range(), speed up tempo...
[ardour.git] / libs / ardour / ardour / internal_send.h
index 0215ea9b9a804c36fa786232ae8a4ed1653d0cbc..263c40b90b86a278135a5aa2d581bae1afefe3b2 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2009 Paul Davis 
+    Copyright (C) 2009 Paul Davis
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
 #ifndef __ardour_internal_send_h__
 #define __ardour_internal_send_h__
 
-#include <sigc++/signal.h>
-#include <string>
-
-
-#include <pbd/stateful.h> 
-#include <ardour/ardour.h>
-#include <ardour/audioengine.h>
-#include <ardour/io.h>
-#include <ardour/io_processor.h>
+#include "ardour/ardour.h"
+#include "ardour/send.h"
 
 namespace ARDOUR {
 
-class InternalSend : public IOProcessor 
+class LIBARDOUR_API InternalSend : public Send
 {
-  public:      
-       InternalSend (Session&, Placement, boost::shared_ptr<IO> destination);
+  public:
+       InternalSend (Session&, boost::shared_ptr<Pannable>, boost::shared_ptr<MuteMaster>, boost::shared_ptr<Route> send_from, boost::shared_ptr<Route> send_to, Delivery::Role role = Delivery::Aux, bool ignore_bitslot = false);
        virtual ~InternalSend ();
 
-       ChanCount output_streams() const;
-       ChanCount input_streams () const;
-       
-       void run_in_place (BufferSet& bufs, nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset);
-       
-       void set_metering (bool yn);
-
-       void activate ();
-       void deactivate ();
+       std::string display_name() const;
+       bool set_name (const std::string&);
+       bool visible() const;
 
+       XMLNode& state(bool full);
        XMLNode& get_state(void);
-       int set_state(const XMLNode& node);
-
-       uint32_t pans_required() const { return _configured_input.n_audio(); }
-       void expect_inputs (const ChanCount&);
+       int set_state(const XMLNode& node, int version);
 
-       bool can_support_io_configuration (const ChanCount& in, ChanCount& out) const;
+       void cycle_start (pframes_t);
+       void run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, double speed, pframes_t nframes, bool);
+       bool feeds (boost::shared_ptr<Route> other) const;
+       bool can_support_io_configuration (const ChanCount& in, ChanCount& out);
        bool configure_io (ChanCount in, ChanCount out);
+       int  set_block_size (pframes_t);
 
-       static uint32_t how_many_sends();
+       boost::shared_ptr<Route> source_route() const { return _send_from; }
+       boost::shared_ptr<Route> target_route() const { return _send_to; }
+       const PBD::ID& target_id() const { return _send_to_id; }
 
-  private:
-       boost::shared_ptr<IO> destination;
-       bool      _metering;
-       ChanCount expected_inputs;
-       uint32_t  bitslot;
+       BufferSet const & get_buffers () const {
+               return mixbufs;
+       }
+
+       void set_can_pan (bool yn);
+       uint32_t pan_outs () const;
 
-       void destination_io_config_changed (IOChange,void*);
+       static PBD::Signal1<void, pframes_t> CycleStart;
+
+  private:
+       BufferSet mixbufs;
+       boost::shared_ptr<Route> _send_from;
+       boost::shared_ptr<Route> _send_to;
+       PBD::ID _send_to_id;
+       PBD::ScopedConnection connect_c;
+       PBD::ScopedConnection source_connection;
+       PBD::ScopedConnectionList target_connections;
+
+       void send_from_going_away ();
+       void send_to_going_away ();
+       void send_to_property_changed (const PBD::PropertyChange&);
+       int  connect_when_legal ();
+       void init_gain ();
+       int  use_target (boost::shared_ptr<Route>);
+       void target_io_changed ();
 };
 
 } // namespace ARDOUR
 
-#endif /* __ardour_internal_send_h__ */
+#endif /* __ardour_send_h__ */