diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2017-04-10 11:44:48 +0100 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2017-09-18 11:40:53 -0400 |
commit | 68e57101add5f84faba4a29ac17f410f2f9d5e44 (patch) | |
tree | f2ef22f653146e0a43dd33254c0172c5fae6377d /libs/ardour/ardour | |
parent | 361cab503b6f51be4612037610924d302b1f6a22 (diff) |
fully remove diskstream code
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r-- | libs/ardour/ardour/audio_diskstream.h | 270 | ||||
-rw-r--r-- | libs/ardour/ardour/diskstream.h | 369 | ||||
-rw-r--r-- | libs/ardour/ardour/midi_diskstream.h | 194 | ||||
-rw-r--r-- | libs/ardour/ardour/public_diskstream.h | 82 | ||||
-rw-r--r-- | libs/ardour/ardour/rc_configuration_vars.h | 4 |
5 files changed, 2 insertions, 917 deletions
diff --git a/libs/ardour/ardour/audio_diskstream.h b/libs/ardour/ardour/audio_diskstream.h deleted file mode 100644 index 21541c6fb8..0000000000 --- a/libs/ardour/ardour/audio_diskstream.h +++ /dev/null @@ -1,270 +0,0 @@ -/* - Copyright (C) 2000-2006 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 - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#ifndef __ardour_audio_diskstream_h__ -#define __ardour_audio_diskstream_h__ - - -#include <cmath> -#include <string> -#include <queue> -#include <map> -#include <vector> - -#include <time.h> - -#include <boost/utility.hpp> - -#include "pbd/fastlog.h" -#include "pbd/ringbufferNPT.h" -#include "pbd/stateful.h" -#include "pbd/rcu.h" - -#include "ardour/ardour.h" -#include "ardour/utils.h" -#include "ardour/diskstream.h" -#include "ardour/audioplaylist.h" -#include "ardour/port.h" -#include "ardour/interpolation.h" - -struct tm; - -namespace ARDOUR { - -class AudioEngine; -class Send; -class Session; -class AudioPlaylist; -class AudioFileSource; -class IO; - -class LIBARDOUR_API AudioDiskstream : public Diskstream -{ - public: - AudioDiskstream (Session &, const std::string& name, Diskstream::Flag f = Recordable); - AudioDiskstream (Session &, const XMLNode&); - ~AudioDiskstream(); - - float playback_buffer_load() const; - float capture_buffer_load() const; - - std::string input_source (uint32_t n=0) const { - boost::shared_ptr<ChannelList> c = channels.reader(); - if (n < c->size()) { - return (*c)[n]->source.name; - } else { - return ""; - } - } - - void set_record_enabled (bool yn); - void set_record_safe (bool yn); - - boost::shared_ptr<AudioPlaylist> audio_playlist () { return boost::dynamic_pointer_cast<AudioPlaylist>(_playlist); } - - int use_playlist (boost::shared_ptr<Playlist>); - int use_new_playlist (); - int use_copy_playlist (); - - Sample *playback_buffer (uint32_t n = 0) { - boost::shared_ptr<ChannelList> c = channels.reader(); - if (n < c->size()) - return (*c)[n]->current_playback_buffer; - return 0; - } - - Sample *capture_buffer (uint32_t n = 0) { - boost::shared_ptr<ChannelList> c = channels.reader(); - if (n < c->size()) - return (*c)[n]->current_capture_buffer; - return 0; - } - - boost::shared_ptr<AudioFileSource> write_source (uint32_t n=0) { - boost::shared_ptr<ChannelList> c = channels.reader(); - if (n < c->size()) - return (*c)[n]->write_source; - return boost::shared_ptr<AudioFileSource>(); - } - - int add_channel (uint32_t how_many); - int remove_channel (uint32_t how_many); - - bool set_name (std::string const &); - bool set_write_source_name (const std::string& str); - - /* stateful */ - - XMLNode& get_state(void); - int set_state(const XMLNode& node, int version); - - void request_input_monitoring (bool); - - static void swap_by_ptr (Sample *first, Sample *last) { - while (first < last) { - Sample tmp = *first; - *first++ = *last; - *last-- = tmp; - } - } - - - protected: - friend class Session; - - /* the Session is the only point of access for these - because they require that the Session is "inactive" - while they are called. - */ - - void set_pending_overwrite(bool); - int overwrite_existing_buffers (); - void set_block_size (pframes_t); - int internal_playback_seek (framecnt_t distance); - int can_internal_playback_seek (framecnt_t distance); - void reset_write_sources (bool, bool force = false); - void non_realtime_input_change (); - void non_realtime_locate (framepos_t location); - - protected: - friend class Auditioner; - friend class AudioTrack; - int seek (framepos_t which_sample, bool complete_refill = false); - - int process (BufferSet&, framepos_t transport_frame, pframes_t nframes, framecnt_t &, bool need_disk_signal); - frameoffset_t calculate_playback_distance (pframes_t nframes); - bool commit (framecnt_t); - - private: - struct ChannelSource { - std::string name; - - bool is_physical () const; - void request_input_monitoring (bool) const; - }; - - /** Information about one of our channels */ - struct ChannelInfo : public boost::noncopyable { - - ChannelInfo (framecnt_t playback_buffer_size, - framecnt_t capture_buffer_size, - framecnt_t speed_buffer_size, - framecnt_t wrap_buffer_size); - ~ChannelInfo (); - - Sample *playback_wrap_buffer; - Sample *capture_wrap_buffer; - Sample *speed_buffer; - - boost::shared_ptr<AudioFileSource> write_source; - - /** Information about the Port that our audio data comes from */ - ChannelSource source; - - Sample *current_capture_buffer; - Sample *current_playback_buffer; - - /** A ringbuffer for data to be played back, written to in the - butler thread, read from in the process thread. - */ - PBD::RingBufferNPT<Sample> *playback_buf; - PBD::RingBufferNPT<Sample> *capture_buf; - - Sample* scrub_buffer; - Sample* scrub_forward_buffer; - Sample* scrub_reverse_buffer; - - PBD::RingBufferNPT<Sample>::rw_vector playback_vector; - PBD::RingBufferNPT<Sample>::rw_vector capture_vector; - - PBD::RingBufferNPT<CaptureTransition> * capture_transition_buf; - // the following are used in the butler thread only - framecnt_t curr_capture_cnt; - - void resize_playback (framecnt_t); - void resize_capture (framecnt_t); - }; - - typedef std::vector<ChannelInfo*> ChannelList; - - CubicInterpolation interpolation; - - /* The two central butler operations */ - int do_flush (RunContext context, bool force = false); - int do_refill () { return _do_refill(_mixdown_buffer, _gain_buffer, 0); } - - - int read (Sample* buf, Sample* mixdown_buffer, float* gain_buffer, - framepos_t& start, framecnt_t cnt, - int channel, bool reversed); - - void finish_capture (boost::shared_ptr<ChannelList>); - void transport_stopped_wallclock (struct tm&, time_t, bool abort); - void transport_looped (framepos_t transport_frame); - - void init (); - - void init_channel (ChannelInfo &chan); - void destroy_channel (ChannelInfo &chan); - - int use_new_write_source (uint32_t n=0); - - int find_and_use_playlist (const std::string &); - - void allocate_temporary_buffers (); - - int use_pending_capture_data (XMLNode& node); - - void get_input_sources (); - void prepare_record_status(framepos_t capture_start_frame); - void set_align_style_from_io(); - void setup_destructive_playlist (); - void use_destructive_playlist (); - - void adjust_playback_buffering (); - void adjust_capture_buffering (); - - bool prep_record_enable (); - bool prep_record_disable (); - - // Working buffers for do_refill (butler thread) - static void allocate_working_buffers(); - static void free_working_buffers(); - - static Sample* _mixdown_buffer; - static gain_t* _gain_buffer; - - std::vector<boost::shared_ptr<AudioFileSource> > capturing_sources; - - SerializedRCUManager<ChannelList> channels; - - protected: - int _do_refill_with_alloc (bool one_chunk_only); - - /* really */ - private: - int _do_refill (Sample *mixdown_buffer, float *gain_buffer, framecnt_t fill_level); - - int add_channel_to (boost::shared_ptr<ChannelList>, uint32_t how_many); - int remove_channel_from (boost::shared_ptr<ChannelList>, uint32_t how_many); - -}; - -} // namespace ARDOUR - -#endif /* __ardour_audio_diskstream_h__ */ diff --git a/libs/ardour/ardour/diskstream.h b/libs/ardour/ardour/diskstream.h deleted file mode 100644 index ea8e44a0ad..0000000000 --- a/libs/ardour/ardour/diskstream.h +++ /dev/null @@ -1,369 +0,0 @@ -/* - Copyright (C) 2000-2006 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 - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#ifndef __ardour_diskstream_h__ -#define __ardour_diskstream_h__ - -#include <string> -#include <queue> -#include <map> -#include <vector> -#include <cmath> -#include <time.h> - -#include <boost/utility.hpp> - -#include "evoral/Range.hpp" - -#include "ardour/ardour.h" -#include "ardour/chan_count.h" -#include "ardour/session_object.h" -#include "ardour/libardour_visibility.h" -#include "ardour/types.h" -#include "ardour/utils.h" -#include "ardour/public_diskstream.h" - -struct tm; - -namespace ARDOUR { - -class IO; -class Playlist; -class Processor; -class Source; -class Session; -class Track; -class Location; -class BufferSet; - -/** Parent class for classes which can stream data to and from disk. - * These are used by Tracks to get playback and put recorded data. - */ -class LIBARDOUR_API Diskstream : public SessionObject, public PublicDiskstream -{ - public: - enum Flag { - Recordable = 0x1, - Hidden = 0x2, - Destructive = 0x4, - NonLayered = 0x8 - }; - - Diskstream (Session &, const std::string& name, Flag f = Recordable); - Diskstream (Session &, const XMLNode&); - virtual ~Diskstream(); - - virtual bool set_name (const std::string& str); - virtual bool set_write_source_name (const std::string& str); - - std::string write_source_name () const { - if (_write_source_name.empty()) { - return name(); - } else { - return _write_source_name; - } - } - - virtual std::string steal_write_source_name () { return std::string(); } - - boost::shared_ptr<ARDOUR::IO> io() const { return _io; } - void set_track (ARDOUR::Track *); - - /** @return A number between 0 and 1, where 0 indicates that the playback buffer - * is dry (ie the disk subsystem could not keep up) and 1 indicates that the - * buffer is full. - */ - virtual float playback_buffer_load() const = 0; - virtual float capture_buffer_load() const = 0; - - void set_flag (Flag f) { _flags = Flag (_flags | f); } - void unset_flag (Flag f) { _flags = Flag (_flags & ~f); } - - AlignStyle alignment_style() const { return _alignment_style; } - AlignChoice alignment_choice() const { return _alignment_choice; } - void set_align_style (AlignStyle, bool force=false); - void set_align_choice (AlignChoice a, bool force=false); - - framecnt_t roll_delay() const { return _roll_delay; } - void set_roll_delay (framecnt_t); - - 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; - - bool destructive() const { return _flags & Destructive; } - - bool hidden() const { return _flags & Hidden; } - bool recordable() const { return _flags & Recordable; } - bool non_layered() const; // { return _flags & NonLayered; } - bool reversed() const { return _actual_speed < 0.0f; } - double speed() const { return _visible_speed; } - - virtual void punch_in() {} - virtual void punch_out() {} - - void non_realtime_set_speed (); - virtual void non_realtime_locate (framepos_t /*location*/) {}; - virtual void playlist_modified (); - - boost::shared_ptr<Playlist> playlist () { return _playlist; } - - virtual int use_playlist (boost::shared_ptr<Playlist>); - virtual int use_new_playlist () = 0; - virtual int use_copy_playlist () = 0; - - /** @return Start position of currently-running capture (in session frames) */ - framepos_t current_capture_start() const { return capture_start_frame; } - framepos_t current_capture_end() const { return capture_start_frame + capture_captured; } - framepos_t get_capture_start_frame (uint32_t n = 0) const; - framecnt_t get_captured_frames (uint32_t n = 0) const; - - ChanCount n_channels() { return _n_channels; } - - static framecnt_t disk_read_frames() { return disk_read_chunk_frames; } - static framecnt_t disk_write_frames() { return disk_write_chunk_frames; } - static void set_disk_read_chunk_frames (framecnt_t n) { disk_read_chunk_frames = n; } - static void set_disk_write_chunk_frames (framecnt_t n) { disk_write_chunk_frames = n; } - 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); - - virtual void request_input_monitoring (bool) {} - virtual void ensure_input_monitoring (bool) {} - - framecnt_t capture_offset() const { return _capture_offset; } - virtual void set_capture_offset (); - - bool slaved() const { return _slaved; } - void set_slaved(bool yn) { _slaved = yn; } - - int set_loop (Location *loc); - - std::list<boost::shared_ptr<Source> >& last_capture_sources () { return _last_capture_sources; } - - void handle_input_change (IOChange, void *src); - - void move_processor_automation (boost::weak_ptr<Processor>, - std::list<Evoral::RangeMove<framepos_t> > const &); - - /** 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 { - return _pending_overwrite; - } - - PBD::Signal0<void> RecordEnableChanged; - PBD::Signal0<void> RecordSafeChanged; - PBD::Signal0<void> SpeedChanged; - PBD::Signal0<void> ReverseChanged; - /* Emitted when this diskstream is set to use a different playlist */ - PBD::Signal0<void> PlaylistChanged; - PBD::Signal0<void> AlignmentStyleChanged; - PBD::Signal1<void,Location *> LoopSet; - - static PBD::Signal0<void> DiskOverrun; - static PBD::Signal0<void> DiskUnderrun; - - protected: - friend class Session; - friend class Butler; - - /* the Session is the only point of access for these because they require - * that the Session is "inactive" while they are called. - */ - - virtual void set_pending_overwrite (bool) = 0; - virtual int overwrite_existing_buffers () = 0; - virtual int internal_playback_seek (framecnt_t distance) = 0; - 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; - virtual int seek (framepos_t which_sample, bool complete_refill = false) = 0; - - protected: - friend class Track; - - virtual int process (BufferSet&, framepos_t transport_frame, pframes_t nframes, framecnt_t &, bool need_disk_signal) = 0; - virtual frameoffset_t calculate_playback_distance (pframes_t nframes) = 0; - virtual bool commit (framecnt_t) = 0; - - //private: - - enum TransitionType { - CaptureStart = 0, - CaptureEnd - }; - - struct CaptureTransition { - TransitionType type; - framepos_t capture_val; ///< The start or end file frame position - }; - - /* The two central butler operations */ - virtual int do_flush (RunContext context, bool force = false) = 0; - virtual int do_refill () = 0; - - /* XXX fix this redundancy ... */ - - virtual void playlist_changed (const PBD::PropertyChange&); - virtual void playlist_deleted (boost::weak_ptr<Playlist>); - virtual void playlist_ranges_moved (std::list< Evoral::RangeMove<framepos_t> > const &, bool); - - virtual void transport_stopped_wallclock (struct tm&, time_t, bool abort) = 0; - virtual void transport_looped (framepos_t transport_frame) = 0; - - struct CaptureInfo { - framepos_t start; - framecnt_t frames; - }; - - virtual int use_new_write_source (uint32_t n=0) = 0; - - virtual int find_and_use_playlist (const std::string&) = 0; - - virtual void allocate_temporary_buffers () = 0; - - virtual bool realtime_set_speed (double, bool global_change); - - std::list<boost::shared_ptr<Source> > _last_capture_sources; - - virtual int use_pending_capture_data (XMLNode& node) = 0; - - virtual void check_record_status (framepos_t transport_frame, bool can_record); - virtual void prepare_record_status (framepos_t /*capture_start_frame*/) {} - virtual void set_align_style_from_io() {} - virtual void setup_destructive_playlist () {} - virtual void use_destructive_playlist () {} - virtual void prepare_to_stop (framepos_t transport_pos, framepos_t audible_frame); - - void engage_record_enable (); - void disengage_record_enable (); - void engage_record_safe (); - void disengage_record_safe (); - - virtual bool prep_record_enable () = 0; - virtual bool prep_record_disable () = 0; - - void calculate_record_range ( - Evoral::OverlapType ot, framepos_t transport_frame, framecnt_t nframes, - framecnt_t& rec_nframes, framecnt_t& rec_offset - ); - - static framecnt_t disk_read_chunk_frames; - static framecnt_t disk_write_chunk_frames; - - std::vector<CaptureInfo*> capture_info; - mutable Glib::Threads::Mutex capture_info_lock; - - uint32_t i_am_the_modifier; - - boost::shared_ptr<ARDOUR::IO> _io; - Track* _track; - ChanCount _n_channels; - - boost::shared_ptr<Playlist> _playlist; - - gint _record_enabled; - gint _record_safe; - double _visible_speed; - double _actual_speed; - /* items needed for speed change logic */ - bool _buffer_reallocation_required; - bool _seek_required; - - /** Start of currently running capture in session frames */ - framepos_t capture_start_frame; - framecnt_t capture_captured; - bool was_recording; - framecnt_t adjust_capture_position; - framecnt_t _capture_offset; - /** The number of frames by which this diskstream's output should be delayed - with respect to the transport frame. This is used for latency compensation. - */ - framecnt_t _roll_delay; - framepos_t first_recordable_frame; - framepos_t last_recordable_frame; - int last_possibly_recording; - AlignStyle _alignment_style; - AlignChoice _alignment_choice; - bool _slaved; - Location* loop_location; - framepos_t overwrite_frame; - off_t overwrite_offset; - bool _pending_overwrite; - bool overwrite_queued; - IOChange input_change_pending; - framecnt_t wrap_buffer_size; - framecnt_t speed_buffer_size; - - double _speed; - double _target_speed; - - /** The next frame position that we should be reading from in our playlist */ - framepos_t file_frame; - framepos_t playback_sample; - - bool in_set_state; - - std::string _write_source_name; - - Glib::Threads::Mutex state_lock; - - PBD::ScopedConnectionList playlist_connections; - - PBD::ScopedConnection ic_connection; - - Flag _flags; - 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 */ - -#endif /* __ardour_diskstream_h__ */ diff --git a/libs/ardour/ardour/midi_diskstream.h b/libs/ardour/ardour/midi_diskstream.h deleted file mode 100644 index ff66222d02..0000000000 --- a/libs/ardour/ardour/midi_diskstream.h +++ /dev/null @@ -1,194 +0,0 @@ -/* - Copyright (C) 2000 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 - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - $Id: diskstream.h 579 2006-06-12 19:56:37Z essej $ -*/ - -#ifndef __ardour_midi_diskstream_h__ -#define __ardour_midi_diskstream_h__ - - -#include <cmath> -#include <cassert> -#include <string> -#include <queue> -#include <map> -#include <vector> - -#include <time.h> - -#include "pbd/fastlog.h" -#include "pbd/ringbufferNPT.h" - -#include "ardour/ardour.h" -#include "ardour/diskstream.h" -#include "ardour/midi_buffer.h" -#include "ardour/utils.h" -#include "ardour/interpolation.h" - -struct tm; - -namespace ARDOUR { - -class IO; -class MidiEngine; -class MidiPlaylist; -class MidiPort; -class MidiRingbuffer; -class MidiSource; -class SMFSource; -class Send; -class Session; - -template<typename T> class MidiRingBuffer; - -class LIBARDOUR_API MidiDiskstream : public Diskstream -{ - public: - MidiDiskstream (Session &, const std::string& name, Diskstream::Flag f = Recordable); - MidiDiskstream (Session &, const XMLNode&); - ~MidiDiskstream(); - - float playback_buffer_load() const; - float capture_buffer_load() const; - - void flush_playback (framepos_t, framepos_t); - - void set_record_enabled (bool yn); - void set_record_safe (bool yn); - - void reset_tracker (); - void resolve_tracker (Evoral::EventSink<framepos_t>& buffer, framepos_t time); - - boost::shared_ptr<MidiPlaylist> midi_playlist (); - - int use_playlist (boost::shared_ptr<Playlist>); - int use_new_playlist (); - int use_copy_playlist (); - - bool set_name (std::string const &); - bool set_write_source_name (const std::string& str); - - /* stateful */ - XMLNode& get_state(void); - int set_state(const XMLNode&, int version); - - void ensure_input_monitoring (bool); - - boost::shared_ptr<SMFSource> write_source () { return _write_source; } - - void set_note_mode (NoteMode m); - - /** Emitted when some MIDI data has been received for recording. - * Parameter is the source that it is destined for. - * A caller can get a copy of the data with get_gui_feed_buffer () - */ - PBD::Signal1<void, boost::weak_ptr<MidiSource> > DataRecorded; - - boost::shared_ptr<MidiBuffer> get_gui_feed_buffer () const; - - protected: - friend class Session; - friend class Butler; - - /* the Session is the only point of access for these - because they require that the Session is "inactive" - while they are called. - */ - - void set_pending_overwrite(bool); - int overwrite_existing_buffers (); - void set_block_size (pframes_t); - int internal_playback_seek (framecnt_t distance); - int can_internal_playback_seek (framecnt_t distance); - std::string steal_write_source_name(); - void reset_write_sources (bool, bool force = false); - void non_realtime_input_change (); - void non_realtime_locate (framepos_t location); - - static void set_readahead_frames (framecnt_t frames_ahead) { midi_readahead = frames_ahead; } - - protected: - friend class MidiTrack; - friend class Auditioner; - - int seek (framepos_t which_sample, bool complete_refill = false); - int _do_refill_with_alloc (bool one_chunk_only); - int process (BufferSet&, framepos_t transport_frame, pframes_t nframes, framecnt_t &, bool need_diskstream); - frameoffset_t calculate_playback_distance (pframes_t nframes); - bool commit (framecnt_t nframes); - - static framecnt_t midi_readahead; - - private: - void get_playback (MidiBuffer& dst, framecnt_t); - - /* The two central butler operations */ - int do_flush (RunContext context, bool force = false); - int do_refill (); - - int read (framepos_t& start, framecnt_t cnt, bool reversed); - - void finish_capture (); - void transport_stopped_wallclock (struct tm&, time_t, bool abort); - void transport_looped (framepos_t transport_frame); - - void init (); - - int use_new_write_source (uint32_t n=0); - - int find_and_use_playlist (const std::string&); - - void allocate_temporary_buffers (); - - int use_pending_capture_data (XMLNode& node); - - void get_input_sources (); - void set_align_style_from_io(); - - /* fixed size buffers per instance of ardour for now (non-dynamic) - */ - - void adjust_playback_buffering () {} - void adjust_capture_buffering () {} - - bool prep_record_enable (); - bool prep_record_disable (); - - MidiRingBuffer<framepos_t>* _playback_buf; - MidiRingBuffer<framepos_t>* _capture_buf; - boost::weak_ptr<MidiPort> _source_port; - boost::shared_ptr<SMFSource> _write_source; - NoteMode _note_mode; - gint _frames_written_to_ringbuffer; - gint _frames_read_from_ringbuffer; - volatile gint _frames_pending_write; - volatile gint _num_captured_loops; - framepos_t _accumulated_capture_offset; - - /** A buffer that we use to put newly-arrived MIDI data in for - the GUI to read (so that it can update itself). - */ - MidiBuffer _gui_feed_buffer; - mutable Glib::Threads::Mutex _gui_feed_buffer_mutex; - - CubicMidiInterpolation interpolation; -}; - -}; /* namespace ARDOUR */ - -#endif /* __ardour_midi_diskstream_h__ */ diff --git a/libs/ardour/ardour/public_diskstream.h b/libs/ardour/ardour/public_diskstream.h deleted file mode 100644 index a80219ff80..0000000000 --- a/libs/ardour/ardour/public_diskstream.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - Copyright (C) 2010 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 - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#ifndef __ardour_public_diskstream_h__ -#define __ardour_public_diskstream_h__ - -namespace ARDOUR { - -class Playlist; -class Source; -class Location; - -/** Public interface to a Diskstream */ -class LIBARDOUR_API PublicDiskstream -{ -public: - virtual ~PublicDiskstream() {} - - virtual boost::shared_ptr<Playlist> playlist () = 0; - virtual void request_input_monitoring (bool) = 0; - virtual void ensure_input_monitoring (bool) = 0; - virtual bool destructive () const = 0; - virtual std::list<boost::shared_ptr<Source> > & last_capture_sources () = 0; - virtual void set_capture_offset () = 0; - virtual std::string steal_write_source_name () = 0; - virtual void reset_write_sources (bool, bool force = false) = 0; - virtual float playback_buffer_load () const = 0; - virtual float capture_buffer_load () const = 0; - virtual int do_refill () = 0; - virtual int do_flush (RunContext, bool force = false) = 0; - virtual void set_pending_overwrite (bool) = 0; - virtual int seek (framepos_t, bool complete_refill = false) = 0; - virtual bool hidden () const = 0; - virtual int can_internal_playback_seek (framecnt_t) = 0; - virtual int internal_playback_seek (framecnt_t) = 0; - virtual void non_realtime_input_change () = 0; - virtual void non_realtime_locate (framepos_t) = 0; - virtual void non_realtime_set_speed () = 0; - virtual int overwrite_existing_buffers () = 0; - virtual framecnt_t get_captured_frames (uint32_t n = 0) const = 0; - virtual int set_loop (Location *) = 0; - virtual void transport_looped (framepos_t) = 0; - virtual bool realtime_set_speed (double, bool) = 0; - virtual void transport_stopped_wallclock (struct tm &, time_t, bool) = 0; - virtual bool pending_overwrite () const = 0; - virtual double speed () const = 0; - virtual void prepare_to_stop (framepos_t,framepos_t) = 0; - virtual void set_slaved (bool) = 0; - virtual ChanCount n_channels () = 0; - virtual framepos_t get_capture_start_frame (uint32_t n = 0) const = 0; - virtual AlignStyle alignment_style () const = 0; - virtual framepos_t current_capture_start () const = 0; - virtual framepos_t current_capture_end () const = 0; - virtual void playlist_modified () = 0; - // XXX DISK removed virtual int use_playlist (boost::shared_ptr<Playlist>) = 0; - virtual void set_align_style (AlignStyle, bool force=false) = 0; - virtual void set_align_choice (AlignChoice, bool force=false) = 0; - virtual int use_copy_playlist () = 0; - virtual int use_new_playlist () = 0; - virtual void adjust_playback_buffering () = 0; - virtual void adjust_capture_buffering () = 0; -}; - -} - -#endif diff --git a/libs/ardour/ardour/rc_configuration_vars.h b/libs/ardour/ardour/rc_configuration_vars.h index 66719e8d06..b0d8cf192e 100644 --- a/libs/ardour/ardour/rc_configuration_vars.h +++ b/libs/ardour/ardour/rc_configuration_vars.h @@ -89,8 +89,8 @@ CONFIG_VARIABLE (bool, use_tranzport, "use-tranzport", false) /* disk operations */ -CONFIG_VARIABLE (uint32_t, minimum_disk_read_bytes, "minimum-disk-read-bytes", ARDOUR::Diskstream::default_disk_read_chunk_frames() * sizeof (ARDOUR::Sample)) -CONFIG_VARIABLE (uint32_t, minimum_disk_write_bytes, "minimum-disk-write-bytes", ARDOUR::Diskstream::default_disk_write_chunk_frames() * sizeof (ARDOUR::Sample)) + CONFIG_VARIABLE (uint32_t, minimum_disk_read_bytes, "minimum-disk-read-bytes", ARDOUR::DiskReader::default_chunk_frames() * sizeof (ARDOUR::Sample)) +CONFIG_VARIABLE (uint32_t, minimum_disk_write_bytes, "minimum-disk-write-bytes", ARDOUR::DiskWriter::default_chunk_frames() * sizeof (ARDOUR::Sample)) CONFIG_VARIABLE (float, midi_readahead, "midi-readahead", 1.0) CONFIG_VARIABLE (BufferingPreset, buffering_preset, "buffering-preset", Medium) CONFIG_VARIABLE (float, audio_capture_buffer_seconds, "capture-buffer-seconds", 5.0) |