summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r--libs/ardour/ardour/disk_io.h6
-rw-r--r--libs/ardour/ardour/disk_reader.h26
-rw-r--r--libs/ardour/ardour/session.h4
-rw-r--r--libs/ardour/ardour/session_event.h1
-rw-r--r--libs/ardour/ardour/track.h2
-rw-r--r--libs/ardour/ardour/types.h6
6 files changed, 23 insertions, 22 deletions
diff --git a/libs/ardour/ardour/disk_io.h b/libs/ardour/ardour/disk_io.h
index 65486febf4..1ae7cbfa94 100644
--- a/libs/ardour/ardour/disk_io.h
+++ b/libs/ardour/ardour/disk_io.h
@@ -151,13 +151,11 @@ protected:
ChannelInfo (samplecnt_t buffer_size);
virtual ~ChannelInfo ();
- /** A pair of random-access ringbuffers for data to be played back.
+ /** A semi-random-access ringbuffers for data to be played back.
* written to in the butler thread, read from in the process
* thread.
- *
- *
*/
- PBD::PlaybackBuffer<Sample>* rbuf[2];
+ PBD::PlaybackBuffer<Sample>* rbuf;
/** A ringbuffer for data to be recorded back, written to in the
* process thread, read from in the butler thread.
diff --git a/libs/ardour/ardour/disk_reader.h b/libs/ardour/ardour/disk_reader.h
index e43192f0ff..dbe639d5c6 100644
--- a/libs/ardour/ardour/disk_reader.h
+++ b/libs/ardour/ardour/disk_reader.h
@@ -54,7 +54,7 @@ public:
void realtime_handle_transport_stopped ();
void realtime_locate (bool);
bool overwrite_existing_buffers ();
- void set_pending_overwrite ();
+ void set_pending_overwrite (OverwriteReason);
void set_loop (Location *);
int set_state (const XMLNode&, int version);
@@ -118,8 +118,6 @@ public:
static void alloc_loop_declick (samplecnt_t sample_rate);
Glib::Threads::Mutex rbuf_lock;
- void queue_switch_rbuf ();
- void switch_rbufs ();
protected:
friend class Track;
@@ -186,10 +184,8 @@ protected:
};
private:
- bool _switch_rbuf;
- int process_rbuf;
- int other_rbuf;
samplepos_t overwrite_sample;
+ sampleoffset_t overwrite_offset;
samplepos_t new_file_sample;
mutable gint _pending_overwrite;
bool overwrite_queued;
@@ -211,14 +207,13 @@ private:
static Declicker loop_declick_out;
static samplecnt_t loop_fade_length;
- int audio_read (PBD::PlaybackBuffer<Sample>*,
- Sample* sum_buffer,
- Sample* mixdown_buffer,
- float* gain_buffer,
- samplepos_t& start, samplecnt_t cnt,
- ReaderChannelInfo* rci,
- int channel,
- bool reversed);
+ samplecnt_t audio_read (Sample* sum_buffer,
+ Sample* mixdown_buffer,
+ float* gain_buffer,
+ samplepos_t& start, samplecnt_t cnt,
+ ReaderChannelInfo* rci,
+ int channel,
+ bool reversed);
static Sample* _sum_buffer;
static Sample* _mixdown_buffer;
@@ -234,7 +229,8 @@ private:
void get_midi_playback (MidiBuffer& dst, samplepos_t start_sample, samplepos_t end_sample, MonitorState, BufferSet&, double speed, samplecnt_t distance);
void maybe_xfade_loop (Sample*, samplepos_t read_start, samplepos_t read_end, ReaderChannelInfo*);
-
+ bool overwrite_existing_audio ();
+ bool overwrite_existing_midi ();
};
} // namespace
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index 6c34a1b93f..5491f49df4 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -456,7 +456,7 @@ public:
void allow_auto_play (bool yn);
void request_transport_speed (double speed, bool as_default = true, TransportRequestSource origin = TRS_UI);
void request_transport_speed_nonzero (double, bool as_default = true, TransportRequestSource origin = TRS_UI);
- void request_overwrite_buffer (boost::shared_ptr<Track>);
+ void request_overwrite_buffer (boost::shared_ptr<Track>, OverwriteReason);
void adjust_playback_buffering();
void adjust_capture_buffering();
@@ -1685,7 +1685,7 @@ private:
void set_play_loop (bool yn, bool change_transport_state);
void unset_play_loop (bool change_transport_state = false);
- void overwrite_some_buffers (boost::shared_ptr<Route>);
+ void overwrite_some_buffers (boost::shared_ptr<Route>, OverwriteReason);
void flush_all_inserts ();
int micro_locate (samplecnt_t distance);
diff --git a/libs/ardour/ardour/session_event.h b/libs/ardour/ardour/session_event.h
index da6a0505f2..ddf7210617 100644
--- a/libs/ardour/ardour/session_event.h
+++ b/libs/ardour/ardour/session_event.h
@@ -83,6 +83,7 @@ public:
union {
bool yes_or_no;
samplepos_t target2_sample;
+ OverwriteReason overwrite;
};
boost::shared_ptr<Track> track;
diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h
index 0b6462fbc3..fbac03edf0 100644
--- a/libs/ardour/ardour/track.h
+++ b/libs/ardour/ardour/track.h
@@ -137,7 +137,7 @@ public:
float capture_buffer_load () const;
int do_refill ();
int do_flush (RunContext, bool force = false);
- void set_pending_overwrite ();
+ void set_pending_overwrite (OverwriteReason);
int seek (samplepos_t, bool complete_refill = false);
bool can_internal_playback_seek (samplecnt_t);
void internal_playback_seek (samplecnt_t);
diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h
index 7cd3759a88..26da1cf9e1 100644
--- a/libs/ardour/ardour/types.h
+++ b/libs/ardour/ardour/types.h
@@ -792,6 +792,12 @@ enum LoopFadeChoice {
XFadeLoop,
};
+enum OverwriteReason {
+ PlaylistModified,
+ LoopDisabled,
+ LoopChanged,
+};
+
typedef std::vector<CaptureInfo*> CaptureInfos;
} // namespace ARDOUR