19 #ifndef __ardour_audio_diskstream_h__
20 #define __ardour_audio_diskstream_h__
31 #include <boost/utility.hpp>
39 #include "ardour/utils.h"
53 class AudioFileSource;
63 float playback_buffer_load()
const;
64 float capture_buffer_load()
const;
69 return (*c)[n]->source.name;
75 void set_record_enabled (
bool yn);
76 int set_destructive (
bool yn);
77 int set_non_layered (
bool yn);
78 bool can_become_destructive (
bool& requires_bounce)
const;
83 int use_new_playlist ();
84 int use_copy_playlist ();
89 return (*c)[n]->current_playback_buffer;
96 return (*c)[n]->current_capture_buffer;
103 return (*c)[n]->write_source;
107 int add_channel (uint32_t how_many);
108 int remove_channel (uint32_t how_many);
110 bool set_name (std::string
const &);
111 bool set_write_source_name (
const std::string& str);
116 int set_state(
const XMLNode& node,
int version);
118 void request_input_monitoring (
bool);
121 while (first < last) {
137 void set_pending_overwrite(
bool);
138 int overwrite_existing_buffers ();
140 int internal_playback_seek (
framecnt_t distance);
141 int can_internal_playback_seek (
framecnt_t distance);
142 void reset_write_sources (
bool,
bool force =
false);
143 void non_realtime_input_change ();
144 void non_realtime_locate (
framepos_t location);
149 int seek (
framepos_t which_sample,
bool complete_refill =
false);
159 bool is_physical ()
const;
160 void request_input_monitoring (
bool)
const;
210 int do_flush (
RunContext context,
bool force =
false);
211 int do_refill () {
return _do_refill(_mixdown_buffer, _gain_buffer); }
213 int do_refill_with_alloc ();
215 int read (
Sample* buf,
Sample* mixdown_buffer,
float* gain_buffer,
217 int channel,
bool reversed);
220 void transport_stopped_wallclock (
struct tm&, time_t,
bool abort);
221 void transport_looped (
framepos_t transport_frame);
225 void init_channel (ChannelInfo &chan);
226 void destroy_channel (ChannelInfo &chan);
228 int use_new_write_source (uint32_t n=0);
230 int find_and_use_playlist (
const std::string &);
232 void allocate_temporary_buffers ();
234 int use_pending_capture_data (
XMLNode& node);
236 void get_input_sources ();
237 void prepare_record_status(
framepos_t capture_start_frame);
238 void set_align_style_from_io();
239 void setup_destructive_playlist ();
240 void use_destructive_playlist ();
242 void adjust_playback_buffering ();
243 void adjust_capture_buffering ();
245 bool prep_record_enable ();
246 bool prep_record_disable ();
249 static void allocate_working_buffers();
250 static void free_working_buffers();
262 int _do_refill (
Sample *mixdown_buffer,
float *gain_buffer);
Sample * playback_wrap_buffer
framecnt_t curr_capture_cnt
Sample * scrub_reverse_buffer
PBD::RingBufferNPT< Sample > * capture_buf
shared_ptr< T > dynamic_pointer_cast(shared_ptr< U > const &r)
static Sample * _mixdown_buffer
PBD::RingBufferNPT< CaptureTransition > * capture_transition_buf
static size_t _working_buffers_size
LIBARDOUR_API PBD::PropertyDescriptor< framepos_t > start
PBD::RingBufferNPT< Sample >::rw_vector capture_vector
Sample * current_playback_buffer
boost::shared_ptr< AudioFileSource > write_source(uint32_t n=0)
std::vector< boost::shared_ptr< AudioFileSource > > capturing_sources
CubicInterpolation interpolation
PBD::RingBufferNPT< Sample > * playback_buf
Sample * capture_wrap_buffer
Sample * playback_buffer(uint32_t n=0)
Sample * scrub_forward_buffer
std::vector< ChannelInfo * > ChannelList
Sample * capture_buffer(uint32_t n=0)
SerializedRCUManager< ChannelList > channels
boost::shared_ptr< AudioFileSource > write_source
std::string input_source(uint32_t n=0) const
Sample * current_capture_buffer
LIBARDOUR_API uint64_t AudioEngine
boost::shared_ptr< AudioPlaylist > audio_playlist()
PBD::RingBufferNPT< Sample >::rw_vector playback_vector
LIBARDOUR_API bool init(bool with_vst, bool try_optimization, const char *localedir)
static gain_t * _gain_buffer
static void swap_by_ptr(Sample *first, Sample *last)