change name of a Session method to makes its intended function clear
[ardour.git] / libs / ardour / ardour / diskstream.h
index fc41d10160d41f996fcd1b29e968ace16402d6ae..e51f8c3ef15ec7c42d6232d92dcca0ce89a05392 100644 (file)
@@ -29,7 +29,7 @@
 
 #include <boost/utility.hpp>
 
-#include "evoral/types.hpp"
+#include "evoral/Range.hpp"
 
 #include "ardour/ardour.h"
 #include "ardour/chan_count.h"
@@ -103,8 +103,8 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream
        framecnt_t roll_delay() const { return _roll_delay; }
        void       set_roll_delay (framecnt_t);
 
-       bool         record_enabled() const { return g_atomic_int_get (&_record_enabled); }
-       bool         record_safe () const { return g_atomic_int_get (&_record_safe); }
+       bool         record_enabled() const { return g_atomic_int_get (const_cast<gint*>(&_record_enabled)); }
+       bool         record_safe () const { return g_atomic_int_get (const_cast<gint*>(&_record_safe)); }
        virtual void set_record_enabled (bool yn) = 0;
        virtual void set_record_safe (bool yn) = 0;
 
@@ -147,6 +147,8 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream
        static framecnt_t default_disk_read_chunk_frames ();
        static framecnt_t default_disk_write_chunk_frames ();
 
+       static void set_buffering_parameters (BufferingPreset bp);
+
        /* Stateful */
        virtual XMLNode& get_state(void);
        virtual int      set_state(const XMLNode&, int version);
@@ -169,8 +171,15 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream
        void move_processor_automation (boost::weak_ptr<Processor>,
                        std::list<Evoral::RangeMove<framepos_t> > const &);
 
-       /** For non-butler contexts (allocates temporary working buffers) */
-       virtual int do_refill_with_alloc() = 0;
+       /** For non-butler contexts (allocates temporary working buffers)
+        *
+        * This accessible method has a default argument; derived classes
+        * must inherit the virtual method that we call which does NOT
+        * have a default argument, to avoid complications with inheritance
+        */
+       int do_refill_with_alloc(bool partial_fill = true) {
+               return _do_refill_with_alloc (partial_fill);
+       }
        virtual void set_block_size (pframes_t) = 0;
 
        bool pending_overwrite () const {
@@ -203,6 +212,11 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream
        virtual int  can_internal_playback_seek (framecnt_t distance) = 0;
        virtual void reset_write_sources (bool, bool force = false) = 0;
        virtual void non_realtime_input_change () = 0;
+       /* accessible method has default argument, so use standard C++ "trick"
+          to avoid complications with inheritance, by adding this virtual
+          method which does NOT have a default argument.
+       */
+       virtual int _do_refill_with_alloc (bool partial_fill) = 0;
 
   protected:
        friend class Auditioner;
@@ -345,6 +359,12 @@ class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream
        XMLNode* deprecated_io_node;
 
        void route_going_away ();
+
+       static bool get_buffering_presets (BufferingPreset bp,
+                                          framecnt_t& read_chunk_size,
+                                          framecnt_t& read_buffer_size,
+                                          framecnt_t& write_chunk_size,
+                                          framecnt_t& write_buffer_size);
 };
 
 }; /* namespace ARDOUR */