summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/midi_diskstream.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/ardour/midi_diskstream.h')
-rw-r--r--libs/ardour/ardour/midi_diskstream.h69
1 files changed, 27 insertions, 42 deletions
diff --git a/libs/ardour/ardour/midi_diskstream.h b/libs/ardour/ardour/midi_diskstream.h
index 7877bfaf1c..a048cf4021 100644
--- a/libs/ardour/ardour/midi_diskstream.h
+++ b/libs/ardour/ardour/midi_diskstream.h
@@ -24,6 +24,7 @@
#include <sigc++/signal.h>
#include <cmath>
+#include <cassert>
#include <string>
#include <queue>
#include <map>
@@ -61,27 +62,20 @@ class MidiDiskstream : public Diskstream
MidiDiskstream (Session &, const string& name, Diskstream::Flag f = Recordable);
MidiDiskstream (Session &, const XMLNode&);
- void set_io (ARDOUR::IO& io);
-
- MidiDiskstream& ref() { _refcnt++; return *this; }
- //void unref() { if (_refcnt) _refcnt--; if (_refcnt == 0) delete this; }
- //uint32_t refcnt() const { return _refcnt; }
-
float playback_buffer_load() const;
float capture_buffer_load() const;
-
- //void set_align_style (AlignStyle);
- //void set_persistent_align_style (AlignStyle);
+
+ RawMidi* playback_buffer () { return _current_playback_buffer; }
+ RawMidi* capture_buffer () { return _current_capture_buffer; }
void set_record_enabled (bool yn);
- //void set_speed (double);
+
+ MidiPlaylist* midi_playlist () { return dynamic_cast<MidiPlaylist*>(_playlist); }
int use_playlist (Playlist *);
int use_new_playlist ();
int use_copy_playlist ();
- Playlist *playlist () { return _playlist; }
-
/* stateful */
XMLNode& get_state(void);
@@ -89,8 +83,6 @@ class MidiDiskstream : public Diskstream
void monitor_input (bool);
- //void handle_input_change (IOChange, void *src);
-
protected:
friend class Session;
@@ -108,12 +100,8 @@ class MidiDiskstream : public Diskstream
void reset_write_sources (bool, bool force = false);
void non_realtime_input_change ();
- uint32_t read_data_count() const { return _read_data_count; }
- uint32_t write_data_count() const { return _write_data_count; }
-
protected:
- friend class Auditioner;
- int seek (jack_nframes_t which_sample, bool complete_refill = false);
+ int seek (jack_nframes_t which_sample, bool complete_refill = false);
protected:
friend class MidiTrack;
@@ -126,30 +114,17 @@ class MidiDiskstream : public Diskstream
/* use unref() to destroy a diskstream */
~MidiDiskstream();
- MidiPlaylist* _playlist;
-
- /*Tthe two central butler operations */
- int do_flush (Session::RunContext context, bool force = false) { return 0; }
- int do_refill () { return 0; }
+ /* The two central butler operations */
+ int do_flush (Session::RunContext context, bool force = false);
+ int do_refill ();
- int do_refill_with_alloc() { return 0; }
-
- int read (RawMidi* buf, RawMidi* mixdown_buffer, char * workbuf, jack_nframes_t& start, jack_nframes_t cnt, bool reversed);
-
- /* XXX fix this redundancy ... */
+ int do_refill_with_alloc();
- //void playlist_changed (Change);
- //void playlist_modified ();
- void playlist_deleted (Playlist*);
+ int read (RawMidi* buf, jack_nframes_t& start, jack_nframes_t cnt, bool reversed);
void finish_capture (bool rec_monitors_input);
void transport_stopped (struct tm&, time_t, bool abort);
- struct CaptureInfo {
- uint32_t start;
- uint32_t frames;
- };
-
void init (Diskstream::Flag);
int use_new_write_source (uint32_t n=0);
@@ -158,9 +133,6 @@ class MidiDiskstream : public Diskstream
void allocate_temporary_buffers ();
- //bool realtime_set_speed (double, bool global_change);
- void non_realtime_set_speed ();
-
int use_pending_capture_data (XMLNode& node);
void get_input_sources ();
@@ -169,8 +141,21 @@ class MidiDiskstream : public Diskstream
void setup_destructive_playlist ();
void use_destructive_playlist ();
- std::list<Region*> _last_capture_regions;
- std::vector<SMFSource*> _capturing_sources;
+ void engage_record_enable ();
+ void disengage_record_enable ();
+
+ // FIXME: This is basically a single ChannelInfo.. abstractify that concept?
+ RingBufferNPT<RawMidi>* _playback_buf;
+ RingBufferNPT<RawMidi>* _capture_buf;
+ RawMidi* _current_playback_buffer;
+ RawMidi* _current_capture_buffer;
+ RawMidi* _playback_wrap_buffer;
+ RawMidi* _capture_wrap_buffer;
+ MidiPort* _source_port;
+ SMFSource* _write_source; ///< aka capturing source
+ RingBufferNPT<CaptureTransition>* _capture_transition_buf;
+ RingBufferNPT<RawMidi>::rw_vector _playback_vector;
+ RingBufferNPT<RawMidi>::rw_vector _capture_vector;
};
}; /* namespace ARDOUR */