diff options
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r-- | libs/ardour/ardour/audio_track.h | 11 | ||||
-rw-r--r-- | libs/ardour/ardour/auditioner.h | 6 | ||||
-rw-r--r-- | libs/ardour/ardour/disk_io.h | 14 | ||||
-rw-r--r-- | libs/ardour/ardour/disk_reader.h | 9 | ||||
-rw-r--r-- | libs/ardour/ardour/disk_writer.h | 40 | ||||
-rw-r--r-- | libs/ardour/ardour/midi_track.h | 6 | ||||
-rw-r--r-- | libs/ardour/ardour/public_diskstream.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/route.h | 7 | ||||
-rw-r--r-- | libs/ardour/ardour/track.h | 32 |
9 files changed, 63 insertions, 64 deletions
diff --git a/libs/ardour/ardour/audio_track.h b/libs/ardour/ardour/audio_track.h index 7103825daf..2779e6a4f8 100644 --- a/libs/ardour/ardour/audio_track.h +++ b/libs/ardour/ardour/audio_track.h @@ -40,13 +40,6 @@ class LIBARDOUR_API AudioTrack : public Track int roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame, int declick, bool& need_butler); - boost::shared_ptr<Diskstream> create_diskstream (); - void set_diskstream (boost::shared_ptr<Diskstream>); - - DataType data_type () const { - return DataType::AUDIO; - } - void freeze_me (InterThreadInfo&); void unfreeze (); @@ -62,13 +55,9 @@ class LIBARDOUR_API AudioTrack : public Track boost::shared_ptr<AudioFileSource> write_source (uint32_t n = 0); protected: - boost::shared_ptr<AudioDiskstream> audio_diskstream () const; XMLNode& state (bool full); private: - - boost::shared_ptr<Diskstream> diskstream_factory (XMLNode const &); - int deprecated_use_diskstream_connections (); void set_state_part_two (); void set_state_part_three (); diff --git a/libs/ardour/ardour/auditioner.h b/libs/ardour/ardour/auditioner.h index 48d889344a..1dbe0cd81e 100644 --- a/libs/ardour/ardour/auditioner.h +++ b/libs/ardour/ardour/auditioner.h @@ -80,9 +80,6 @@ class LIBARDOUR_API Auditioner : public Track int roll_audio (pframes_t nframes, framepos_t start_frame, framepos_t end_frame, int declick, bool& need_butler); int roll_midi (pframes_t nframes, framepos_t start_frame, framepos_t end_frame, int declick, bool& need_butler); - boost::shared_ptr<Diskstream> create_diskstream (); - void set_diskstream (boost::shared_ptr<Diskstream> ds); - /* fake track */ void set_state_part_two () {} int set_state (const XMLNode&, int) { return 0; } @@ -102,9 +99,6 @@ class LIBARDOUR_API Auditioner : public Track boost::shared_ptr<Diskstream> diskstream_factory (XMLNode const &) { return boost::shared_ptr<Diskstream> (); } - boost::shared_ptr<AudioDiskstream> audio_diskstream() const; - boost::shared_ptr<MidiDiskstream> midi_diskstream() const; - private: boost::shared_ptr<AudioRegion> the_region; boost::shared_ptr<MidiRegion> midi_region; diff --git a/libs/ardour/ardour/disk_io.h b/libs/ardour/ardour/disk_io.h index dd775cbe84..c10dad54a1 100644 --- a/libs/ardour/ardour/disk_io.h +++ b/libs/ardour/ardour/disk_io.h @@ -65,12 +65,11 @@ class LIBARDOUR_API DiskIOProcessor : public Processor bool configure_io (ChanCount in, ChanCount out); bool can_support_io_configuration (const ChanCount& in, ChanCount& out); - /** @return A number between 0 and 1, where 0 indicates that the playback buffer + /** @return A number between 0 and 1, where 0 indicates that the playback/capture 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; + virtual float buffer_load() const = 0; void set_flag (Flag f) { _flags = Flag (_flags | f); } void unset_flag (Flag f) { _flags = Flag (_flags & ~f); } @@ -89,8 +88,6 @@ class LIBARDOUR_API DiskIOProcessor : public Processor virtual void punch_in() {} virtual void punch_out() {} - virtual float buffer_load() const = 0; - bool slaved() const { return _slaved; } void set_slaved(bool yn) { _slaved = yn; } @@ -113,8 +110,6 @@ class LIBARDOUR_API DiskIOProcessor : public Processor virtual void playlist_modified () {} virtual int use_playlist (DataType, boost::shared_ptr<Playlist>); - virtual int use_new_playlist (DataType); - virtual int use_copy_playlist (DataType); PBD::Signal1<void,DataType> PlaylistChanged; @@ -135,6 +130,8 @@ class LIBARDOUR_API DiskIOProcessor : public Processor bool _slaved; Location* loop_location; bool in_set_state; + framepos_t file_frame; + framepos_t playback_sample; framecnt_t wrap_buffer_size; framecnt_t speed_buffer_size; bool _need_butler; @@ -202,7 +199,6 @@ class LIBARDOUR_API DiskIOProcessor : public Processor 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) {} - int find_and_use_playlist (DataType, std::string const &); /* The MIDI stuff */ @@ -210,6 +206,8 @@ class LIBARDOUR_API DiskIOProcessor : public Processor gint _frames_written_to_ringbuffer; gint _frames_read_from_ringbuffer; CubicMidiInterpolation midi_interpolation; + + static void get_location_times (const Location* location, framepos_t* start, framepos_t* end, framepos_t* length); }; } // namespace ARDOUR diff --git a/libs/ardour/ardour/disk_reader.h b/libs/ardour/ardour/disk_reader.h index 7b076ab23f..e09904ad34 100644 --- a/libs/ardour/ardour/disk_reader.h +++ b/libs/ardour/ardour/disk_reader.h @@ -86,14 +86,18 @@ class LIBARDOUR_API DiskReader : public DiskIOProcessor void adjust_buffering (); int can_internal_playback_seek (framecnt_t distance); + int internal_playback_seek (framecnt_t distance); int seek (framepos_t frame, bool complete_refill = false); static PBD::Signal0<void> Underrun; void playlist_modified (); + void reset_tracker (); protected: - void reset_tracker (); + friend class Track; + friend class MidiTrack; + void resolve_tracker (Evoral::EventSink<framepos_t>& buffer, framepos_t time); boost::shared_ptr<MidiBuffer> get_gui_feed_buffer () const; @@ -113,8 +117,6 @@ class LIBARDOUR_API DiskReader : public DiskIOProcessor IOChange input_change_pending; framecnt_t wrap_buffer_size; framecnt_t speed_buffer_size; - framepos_t file_frame; - framepos_t playback_sample; MonitorChoice _monitoring_choice; int _do_refill_with_alloc (bool partial_fill); @@ -142,7 +144,6 @@ class LIBARDOUR_API DiskReader : public DiskIOProcessor int refill_audio (Sample *mixdown_buffer, float *gain_buffer, framecnt_t fill_level); int refill_midi (); - int internal_playback_seek (framecnt_t distance); frameoffset_t calculate_playback_distance (pframes_t); void get_playback (MidiBuffer& dst, framecnt_t nframes); diff --git a/libs/ardour/ardour/disk_writer.h b/libs/ardour/ardour/disk_writer.h index 3eed3c6d99..d0f3672cbd 100644 --- a/libs/ardour/ardour/disk_writer.h +++ b/libs/ardour/ardour/disk_writer.h @@ -24,12 +24,14 @@ #include <vector> #include "ardour/disk_io.h" +#include "ardour/midi_buffer.h" namespace ARDOUR { class AudioFileSource; class SMFSource; +class MidiSource; class LIBARDOUR_API DiskWriter : public DiskIOProcessor { @@ -50,8 +52,6 @@ class LIBARDOUR_API DiskWriter : public DiskIOProcessor virtual XMLNode& state (bool full); int set_state (const XMLNode&, int version); - virtual int use_new_write_source (uint32_t n=0) = 0; - std::string write_source_name () const { if (_write_source_name.empty()) { return name(); @@ -72,6 +72,8 @@ class LIBARDOUR_API DiskWriter : public DiskIOProcessor boost::shared_ptr<SMFSource> midi_write_source () { return _midi_write_source; } virtual std::string steal_write_source_name () { return std::string(); } + int use_new_write_source (DataType, uint32_t n = 0); + void reset_write_sources (bool, bool force = false); AlignStyle alignment_style() const { return _alignment_style; } AlignChoice alignment_choice() const { return _alignment_choice; } @@ -87,8 +89,8 @@ class LIBARDOUR_API DiskWriter : public DiskIOProcessor 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; + virtual void set_record_enabled (bool yn); + virtual void set_record_safe (bool yn); bool destructive() const { return _flags & Destructive; } int set_destructive (bool yn); @@ -109,16 +111,31 @@ class LIBARDOUR_API DiskWriter : public DiskIOProcessor framecnt_t capture_offset() const { return _capture_offset; } virtual void set_capture_offset (); + int seek (framepos_t frame, bool complete_refill); + static PBD::Signal0<void> Overrun; + 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; + PBD::Signal0<void> RecordEnableChanged; PBD::Signal0<void> RecordSafeChanged; + void check_record_status (framepos_t transport_frame, bool can_record); + + void transport_looped (framepos_t transport_frame); + void transport_stopped_wallclock (struct tm&, time_t, bool abort); + protected: - virtual int do_flush (RunContext context, bool force = false) = 0; + friend class Track; + int do_flush (RunContext context, bool force = false); void get_input_sources (); - void check_record_status (framepos_t transport_frame, bool can_record); void prepare_record_status (framepos_t /*capture_start_frame*/); void set_align_style_from_io(); void setup_destructive_playlist (); @@ -138,9 +155,6 @@ class LIBARDOUR_API DiskWriter : public DiskIOProcessor framecnt_t& rec_nframes, framecnt_t& rec_offset ); - static framecnt_t disk_read_chunk_frames; - static framecnt_t disk_write_chunk_frames; - struct CaptureInfo { framepos_t start; framecnt_t frames; @@ -168,7 +182,7 @@ class LIBARDOUR_API DiskWriter : public DiskIOProcessor std::list<boost::shared_ptr<Source> > _last_capture_sources; std::vector<boost::shared_ptr<AudioFileSource> > capturing_sources; - + static framecnt_t _chunk_frames; NoteMode _note_mode; @@ -176,6 +190,12 @@ class LIBARDOUR_API DiskWriter : public DiskIOProcessor 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; + void finish_capture (boost::shared_ptr<ChannelList> c); }; diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h index dc2d4ec2cf..ea6e4e3636 100644 --- a/libs/ardour/ardour/midi_track.h +++ b/libs/ardour/ardour/midi_track.h @@ -54,10 +54,6 @@ public: bool can_be_record_enabled (); bool can_be_record_safe (); - DataType data_type () const { - return DataType::MIDI; - } - void freeze_me (InterThreadInfo&); void unfreeze (); @@ -156,8 +152,6 @@ private: virtual boost::shared_ptr<Diskstream> diskstream_factory (XMLNode const &); - boost::shared_ptr<MidiDiskstream> midi_diskstream () const; - void write_out_of_band_data (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame, framecnt_t nframes); void set_state_part_two (); diff --git a/libs/ardour/ardour/public_diskstream.h b/libs/ardour/ardour/public_diskstream.h index 1fc93a6674..a80219ff80 100644 --- a/libs/ardour/ardour/public_diskstream.h +++ b/libs/ardour/ardour/public_diskstream.h @@ -68,7 +68,7 @@ public: virtual framepos_t current_capture_start () const = 0; virtual framepos_t current_capture_end () const = 0; virtual void playlist_modified () = 0; - virtual int use_playlist (boost::shared_ptr<Playlist>) = 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; diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index 2c668f6ed7..619e79fafc 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -100,6 +100,13 @@ public: virtual int init (); + DataType data_type () const { + /* XXX ultimately nice to do away with this concept, but it is + quite useful for coders and for users too. + */ + return _default_type; + } + boost::shared_ptr<IO> input() const { return _input; } boost::shared_ptr<IO> output() const { return _output; } IOVector all_inputs () const; diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h index b67e9d970a..33c967f088 100644 --- a/libs/ardour/ardour/track.h +++ b/libs/ardour/ardour/track.h @@ -36,15 +36,19 @@ class RouteGroup; class Source; class Region; class Diskstream; +class DiskReader; +class DiskWriter; class IO; class MonitorControl; class RecordEnableControl; class RecordSafeControl; /** A track is an route (bus) with a recordable diskstream and - * related objects relevant to tracking, playback and editing. + * related objects relevant to recording, playback and editing. * - * Specifically a track has regions and playlist objects. + * Specifically a track has a playlist object that describes material + * to be played from disk, and modifies that object during recording and + * editing. */ class LIBARDOUR_API Track : public Route, public Recordable, public PublicDiskstream { @@ -75,14 +79,8 @@ class LIBARDOUR_API Track : public Route, public Recordable, public PublicDiskst bool needs_butler() const { return _needs_butler; } - virtual DataType data_type () const = 0; - bool can_record(); - void use_new_diskstream (); - virtual boost::shared_ptr<Diskstream> create_diskstream() = 0; - virtual void set_diskstream (boost::shared_ptr<Diskstream>); - void set_latency_compensation (framecnt_t); enum FreezeState { @@ -179,18 +177,17 @@ class LIBARDOUR_API Track : public Route, public Recordable, public PublicDiskst AlignChoice alignment_choice () const; framepos_t current_capture_start () const; framepos_t current_capture_end () const; - void playlist_modified (); - int use_playlist (boost::shared_ptr<Playlist>); void set_align_style (AlignStyle, bool force=false); void set_align_choice (AlignChoice, bool force=false); + void playlist_modified (); + int use_playlist (DataType, boost::shared_ptr<Playlist>); + int find_and_use_playlist (DataType, std::string const & name); int use_copy_playlist (); int use_new_playlist (); void adjust_playback_buffering (); void adjust_capture_buffering (); - PBD::Signal0<void> DiskstreamChanged; PBD::Signal0<void> FreezeChange; - /* Emitted when our diskstream is set to use a different playlist */ PBD::Signal0<void> PlaylistChanged; PBD::Signal0<void> SpeedChanged; PBD::Signal0<void> AlignmentStyleChanged; @@ -199,6 +196,11 @@ class LIBARDOUR_API Track : public Route, public Recordable, public PublicDiskst XMLNode& state (bool full); boost::shared_ptr<Diskstream> _diskstream; + + boost::shared_ptr<DiskReader> _disk_reader; + boost::shared_ptr<DiskWriter> _disk_writer; + boost::shared_ptr<Playlist> _playlists[DataType::num_types]; + MeterPoint _saved_meter_point; TrackMode _mode; bool _needs_butler; @@ -245,12 +247,6 @@ class LIBARDOUR_API Track : public Route, public Recordable, public PublicDiskst virtual void monitoring_changed (bool, PBD::Controllable::GroupControlDisposition); private: - - virtual boost::shared_ptr<Diskstream> diskstream_factory (XMLNode const &) = 0; - - void diskstream_playlist_changed (); - void diskstream_speed_changed (); - void diskstream_alignment_style_changed (); void parameter_changed (std::string const & p); std::string _diskstream_name; |