+ /** 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;
+