+ return AudioEngine::instance()->port_is_physical (name);
+}
+
+void
+AudioDiskstream::ChannelSource::request_jack_monitors_input (bool yn) const
+{
+ if (name.empty()) {
+ return;
+ }
+
+ return AudioEngine::instance()->request_jack_monitors_input (name, yn);
+}
+
+AudioDiskstream::ChannelInfo::ChannelInfo (framecnt_t playback_bufsize, framecnt_t capture_bufsize, framecnt_t speed_size, framecnt_t wrap_size)
+{
+ current_capture_buffer = 0;
+ current_playback_buffer = 0;
+ curr_capture_cnt = 0;
+
+ speed_buffer = new Sample[speed_size];
+ playback_wrap_buffer = new Sample[wrap_size];
+ capture_wrap_buffer = new Sample[wrap_size];
+
+ playback_buf = new RingBufferNPT<Sample> (playback_bufsize);
+ capture_buf = new RingBufferNPT<Sample> (capture_bufsize);
+ capture_transition_buf = new RingBufferNPT<CaptureTransition> (256);
+
+ /* touch the ringbuffer buffers, which will cause
+ them to be mapped into locked physical RAM if
+ we're running with mlockall(). this doesn't do
+ much if we're not.
+ */
+
+ memset (playback_buf->buffer(), 0, sizeof (Sample) * playback_buf->bufsize());
+ memset (capture_buf->buffer(), 0, sizeof (Sample) * capture_buf->bufsize());
+ memset (capture_transition_buf->buffer(), 0, sizeof (CaptureTransition) * capture_transition_buf->bufsize());
+}
+
+void
+AudioDiskstream::ChannelInfo::resize_playback (framecnt_t playback_bufsize)
+{
+ delete playback_buf;
+ playback_buf = new RingBufferNPT<Sample> (playback_bufsize);
+ memset (playback_buf->buffer(), 0, sizeof (Sample) * playback_buf->bufsize());
+}
+
+void
+AudioDiskstream::ChannelInfo::resize_capture (framecnt_t capture_bufsize)
+{
+ delete capture_buf;
+
+ capture_buf = new RingBufferNPT<Sample> (capture_bufsize);
+ memset (capture_buf->buffer(), 0, sizeof (Sample) * capture_buf->bufsize());
+}
+
+AudioDiskstream::ChannelInfo::~ChannelInfo ()
+{
+ write_source.reset ();
+
+ delete [] speed_buffer;
+ speed_buffer = 0;
+
+ delete [] playback_wrap_buffer;
+ playback_wrap_buffer = 0;
+
+ delete [] capture_wrap_buffer;
+ capture_wrap_buffer = 0;
+
+ delete playback_buf;
+ playback_buf = 0;
+
+ delete capture_buf;
+ capture_buf = 0;
+
+ delete capture_transition_buf;
+ capture_transition_buf = 0;
+}
+
+
+bool
+AudioDiskstream::set_name (string const & name)
+{
+ Diskstream::set_name (name);
+
+ /* get a new write source so that its name reflects the new diskstream name */
+
+ boost::shared_ptr<ChannelList> c = channels.reader();
+ ChannelList::iterator i;
+ int n = 0;
+
+ for (n = 0, i = c->begin(); i != c->end(); ++i, ++n) {
+ use_new_write_source (n);
+ }
+