- Fixed a buffer size bug when ~/.ardour2 doesn't exist (can't load configuration), if in a hacky way

- Removed useless workbuf/conversion_buffers (same thing), uneeded with libsndfile


git-svn-id: svn://localhost/ardour2/trunk@781 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
David Robillard 2006-08-10 03:04:13 +00:00
parent ae95684d22
commit d4dd338beb
29 changed files with 88 additions and 144 deletions

View file

@ -221,7 +221,6 @@ AnalysisWindow::analyze_data (Gtk::Button *button)
Sample *buf = (Sample *) malloc(sizeof(Sample) * fft_graph.windowSize()); Sample *buf = (Sample *) malloc(sizeof(Sample) * fft_graph.windowSize());
Sample *mixbuf = (Sample *) malloc(sizeof(Sample) * fft_graph.windowSize()); Sample *mixbuf = (Sample *) malloc(sizeof(Sample) * fft_graph.windowSize());
float *gain = (float *) malloc(sizeof(float) * fft_graph.windowSize()); float *gain = (float *) malloc(sizeof(float) * fft_graph.windowSize());
char *work = (char *) malloc(sizeof(char) * fft_graph.windowSize());
Selection s = PublicEditor::instance().get_selection(); Selection s = PublicEditor::instance().get_selection();
TimeSelection ts = s.time; TimeSelection ts = s.time;
@ -261,7 +260,7 @@ AnalysisWindow::analyze_data (Gtk::Button *button)
n = (*j).length() - i; n = (*j).length() - i;
} }
n = pl->read(buf, mixbuf, gain, work, (*j).start + i, n); n = pl->read(buf, mixbuf, gain, (*j).start + i, n);
if ( n < fft_graph.windowSize()) { if ( n < fft_graph.windowSize()) {
for (int j = n; j < fft_graph.windowSize(); j++) { for (int j = n; j < fft_graph.windowSize(); j++) {
@ -301,7 +300,7 @@ AnalysisWindow::analyze_data (Gtk::Button *button)
n = arv->region().length() - i; n = arv->region().length() - i;
} }
n = arv->audio_region().read_at(buf, mixbuf, gain, work, arv->region().position() + i, n); n = arv->audio_region().read_at(buf, mixbuf, gain, arv->region().position() + i, n);
if ( n < fft_graph.windowSize()) { if ( n < fft_graph.windowSize()) {
for (int j = n; j < fft_graph.windowSize(); j++) { for (int j = n; j < fft_graph.windowSize(); j++) {
@ -331,7 +330,6 @@ AnalysisWindow::analyze_data (Gtk::Button *button)
free(buf); free(buf);
free(mixbuf); free(mixbuf);
free(work);
track_list_ready = true; track_list_ready = true;
} /* end lock */ } /* end lock */

View file

@ -162,7 +162,6 @@ Editor::write_region (string path, AudioRegion& region)
jack_nframes_t to_read; jack_nframes_t to_read;
Sample buf[chunk_size]; Sample buf[chunk_size];
gain_t gain_buffer[chunk_size]; gain_t gain_buffer[chunk_size];
char workbuf[chunk_size *4];
jack_nframes_t pos; jack_nframes_t pos;
char s[PATH_MAX+1]; char s[PATH_MAX+1];
uint32_t cnt; uint32_t cnt;
@ -234,11 +233,11 @@ Editor::write_region (string path, AudioRegion& region)
fs = (*src); fs = (*src);
if (region.read_at (buf, buf, gain_buffer, workbuf, pos, this_time) != this_time) { if (region.read_at (buf, buf, gain_buffer, pos, this_time) != this_time) {
break; break;
} }
if (fs->write (buf, this_time, workbuf) != this_time) { if (fs->write (buf, this_time) != this_time) {
error << "" << endmsg; error << "" << endmsg;
goto error_out; goto error_out;
} }
@ -309,7 +308,6 @@ Editor::write_audio_range (AudioPlaylist& playlist, uint32_t channels, list<Audi
jack_nframes_t nframes; jack_nframes_t nframes;
Sample buf[chunk_size]; Sample buf[chunk_size];
gain_t gain_buffer[chunk_size]; gain_t gain_buffer[chunk_size];
char workbuf[chunk_size*4];
jack_nframes_t pos; jack_nframes_t pos;
char s[PATH_MAX+1]; char s[PATH_MAX+1];
uint32_t cnt; uint32_t cnt;
@ -367,11 +365,11 @@ Editor::write_audio_range (AudioPlaylist& playlist, uint32_t channels, list<Audi
fs = sources[n]; fs = sources[n];
if (playlist.read (buf, buf, gain_buffer, workbuf, pos, this_time, n) != this_time) { if (playlist.read (buf, buf, gain_buffer, pos, this_time, n) != this_time) {
break; break;
} }
if (fs->write (buf, this_time, workbuf) != this_time) { if (fs->write (buf, this_time) != this_time) {
goto error_out; goto error_out;
} }
} }
@ -397,7 +395,7 @@ Editor::write_audio_range (AudioPlaylist& playlist, uint32_t channels, list<Audi
for (uint32_t n=0; n < channels; ++n) { for (uint32_t n=0; n < channels; ++n) {
fs = sources[n]; fs = sources[n];
if (fs->write (buf, this_time, workbuf) != this_time) { if (fs->write (buf, this_time) != this_time) {
goto error_out; goto error_out;
} }
} }

View file

@ -211,11 +211,11 @@ class AudioDiskstream : public Diskstream
/* The two central butler operations */ /* The two central butler operations */
int do_flush (Session::RunContext context, bool force = false); int do_flush (Session::RunContext context, bool force = false);
int do_refill () { return _do_refill(_mixdown_buffer, _gain_buffer, _conversion_buffer); } int do_refill () { return _do_refill(_mixdown_buffer, _gain_buffer); }
int do_refill_with_alloc(); int do_refill_with_alloc();
int read (Sample* buf, Sample* mixdown_buffer, float* gain_buffer, char * workbuf, int read (Sample* buf, Sample* mixdown_buffer, float* gain_buffer,
jack_nframes_t& start, jack_nframes_t cnt, jack_nframes_t& start, jack_nframes_t cnt,
ChannelInfo& channel_info, int channel, bool reversed); ChannelInfo& channel_info, int channel, bool reversed);
@ -251,10 +251,9 @@ class AudioDiskstream : public Diskstream
static size_t _working_buffers_size; static size_t _working_buffers_size;
static Sample* _mixdown_buffer; static Sample* _mixdown_buffer;
static gain_t* _gain_buffer; static gain_t* _gain_buffer;
static char* _conversion_buffer;
// Uh, /really/ private? (death to friend classes) // Uh, /really/ private? (there should probably be less friends of Diskstream)
int _do_refill (Sample *mixdown_buffer, float *gain_buffer, char *workbuf); int _do_refill (Sample *mixdown_buffer, float *gain_buffer);
std::vector<AudioFileSource*> capturing_sources; std::vector<AudioFileSource*> capturing_sources;

View file

@ -51,7 +51,7 @@ class AudioTrack : public Track
int use_diskstream (string name); int use_diskstream (string name);
int use_diskstream (const PBD::ID& id); int use_diskstream (const PBD::ID& id);
int export_stuff (vector<Sample*>& buffers, char * workbuf, uint32_t nbufs, jack_nframes_t nframes, jack_nframes_t end_frame); int export_stuff (vector<Sample*>& buffers, uint32_t nbufs, jack_nframes_t nframes, jack_nframes_t end_frame);
void freeze (InterThreadInfo&); void freeze (InterThreadInfo&);
void unfreeze (); void unfreeze ();

View file

@ -60,7 +60,7 @@ class AudioPlaylist : public ARDOUR::Playlist
void clear (bool with_delete = false, bool with_save = true); void clear (bool with_delete = false, bool with_save = true);
jack_nframes_t read (Sample *dst, Sample *mixdown, float *gain_buffer, char * workbuf, jack_nframes_t start, jack_nframes_t cnt, uint32_t chan_n=0); jack_nframes_t read (Sample *dst, Sample *mixdown, float *gain_buffer, jack_nframes_t start, jack_nframes_t cnt, uint32_t chan_n=0);
int set_state (const XMLNode&); int set_state (const XMLNode&);
UndoAction get_memento() const; UndoAction get_memento() const;

View file

@ -106,13 +106,13 @@ class AudioRegion : public Region
uint32_t chan_n=0, double samples_per_unit= 1.0) const; uint32_t chan_n=0, double samples_per_unit= 1.0) const;
virtual jack_nframes_t read_at (Sample *buf, Sample *mixdown_buf, virtual jack_nframes_t read_at (Sample *buf, Sample *mixdown_buf,
float *gain_buf, char * workbuf, jack_nframes_t position, jack_nframes_t cnt, float *gain_buf, jack_nframes_t position, jack_nframes_t cnt,
uint32_t chan_n = 0, uint32_t chan_n = 0,
jack_nframes_t read_frames = 0, jack_nframes_t read_frames = 0,
jack_nframes_t skip_frames = 0) const; jack_nframes_t skip_frames = 0) const;
jack_nframes_t master_read_at (Sample *buf, Sample *mixdown_buf, jack_nframes_t master_read_at (Sample *buf, Sample *mixdown_buf,
float *gain_buf, char * workbuf, float *gain_buf,
jack_nframes_t position, jack_nframes_t cnt, uint32_t chan_n=0) const; jack_nframes_t position, jack_nframes_t cnt, uint32_t chan_n=0) const;
XMLNode& state (bool); XMLNode& state (bool);
@ -177,7 +177,7 @@ class AudioRegion : public Region
void recompute_gain_at_start (); void recompute_gain_at_start ();
jack_nframes_t _read_at (const SourceList&, Sample *buf, Sample *mixdown_buffer, jack_nframes_t _read_at (const SourceList&, Sample *buf, Sample *mixdown_buffer,
float *gain_buffer, char * workbuf, jack_nframes_t position, jack_nframes_t cnt, float *gain_buffer, jack_nframes_t position, jack_nframes_t cnt,
uint32_t chan_n = 0, uint32_t chan_n = 0,
jack_nframes_t read_frames = 0, jack_nframes_t read_frames = 0,
jack_nframes_t skip_frames = 0) const; jack_nframes_t skip_frames = 0) const;

View file

@ -66,8 +66,8 @@ class AudioSource : public Source
virtual jack_nframes_t available_peaks (double zoom) const; virtual jack_nframes_t available_peaks (double zoom) const;
virtual jack_nframes_t read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const; virtual jack_nframes_t read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt) const;
virtual jack_nframes_t write (Sample *src, jack_nframes_t cnt, char * workbuf); virtual jack_nframes_t write (Sample *src, jack_nframes_t cnt);
virtual float sample_rate () const = 0; virtual float sample_rate () const = 0;
@ -124,8 +124,8 @@ class AudioSource : public Source
int do_build_peak (jack_nframes_t, jack_nframes_t); int do_build_peak (jack_nframes_t, jack_nframes_t);
virtual jack_nframes_t read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const = 0; virtual jack_nframes_t read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt) const = 0;
virtual jack_nframes_t write_unlocked (Sample *dst, jack_nframes_t cnt, char * workbuf) = 0; virtual jack_nframes_t write_unlocked (Sample *dst, jack_nframes_t cnt) = 0;
virtual string peak_path(string audio_path) = 0; virtual string peak_path(string audio_path) = 0;
virtual string old_peak_path(string audio_path) = 0; virtual string old_peak_path(string audio_path) = 0;

View file

@ -38,9 +38,9 @@ class CoreAudioSource : public AudioFileSource {
void set_header_timeline_position () {}; void set_header_timeline_position () {};
protected: protected:
jack_nframes_t read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const; jack_nframes_t read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt) const;
jack_nframes_t write_unlocked (Sample *dst, jack_nframes_t cnt, char * workbuf) jack_nframes_t write_unlocked (Sample *dst, jack_nframes_t cnt)
{ return 0; } { return 0; }

View file

@ -92,7 +92,7 @@ class Crossfade : public Stateful, public StateManager
ARDOUR::AudioRegion& out() const { return *_out; } ARDOUR::AudioRegion& out() const { return *_out; }
jack_nframes_t read_at (Sample *buf, Sample *mixdown_buffer, jack_nframes_t read_at (Sample *buf, Sample *mixdown_buffer,
float *gain_buffer, char * workbuf, jack_nframes_t position, jack_nframes_t cnt, float *gain_buffer, jack_nframes_t position, jack_nframes_t cnt,
uint32_t chan_n, uint32_t chan_n,
jack_nframes_t read_frames = 0, jack_nframes_t read_frames = 0,
jack_nframes_t skip_frames = 0); jack_nframes_t skip_frames = 0);

View file

@ -49,7 +49,7 @@ class DestructiveFileSource : public SndFileSource {
static void setup_standard_crossfades (jack_nframes_t sample_rate); static void setup_standard_crossfades (jack_nframes_t sample_rate);
protected: protected:
jack_nframes_t write_unlocked (Sample *src, jack_nframes_t cnt, char * workbuf); jack_nframes_t write_unlocked (Sample *src, jack_nframes_t cnt);
virtual void handle_header_position_change (); virtual void handle_header_position_change ();
@ -65,7 +65,7 @@ class DestructiveFileSource : public SndFileSource {
Sample* xfade_buf; Sample* xfade_buf;
void init (); void init ();
jack_nframes_t crossfade (Sample* data, jack_nframes_t cnt, int dir, char * workbuf); jack_nframes_t crossfade (Sample* data, jack_nframes_t cnt, int dir);
void set_timeline_position (jack_nframes_t); void set_timeline_position (jack_nframes_t);
}; };

View file

@ -974,8 +974,6 @@ class Session : public sigc::trackable, public Stateful
ExportContext ExportContext
}; };
char * conversion_buffer(RunContext context) { return _conversion_buffers[context]; }
/* VST support */ /* VST support */
static long vst_callback (AEffect* effect, static long vst_callback (AEffect* effect,
@ -1059,7 +1057,6 @@ class Session : public sigc::trackable, public Stateful
vector<Sample *> _passthru_buffers; vector<Sample *> _passthru_buffers;
vector<Sample *> _silent_buffers; vector<Sample *> _silent_buffers;
vector<Sample *> _send_buffers; vector<Sample *> _send_buffers;
map<RunContext,char*> _conversion_buffers;
jack_nframes_t current_block_size; jack_nframes_t current_block_size;
jack_nframes_t _worst_output_latency; jack_nframes_t _worst_output_latency;
jack_nframes_t _worst_input_latency; jack_nframes_t _worst_input_latency;

View file

@ -56,8 +56,8 @@ class SndFileSource : public AudioFileSource {
protected: protected:
void set_header_timeline_position (); void set_header_timeline_position ();
jack_nframes_t read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const; jack_nframes_t read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt) const;
jack_nframes_t write_unlocked (Sample *dst, jack_nframes_t cnt, char * workbuf); jack_nframes_t write_unlocked (Sample *dst, jack_nframes_t cnt);
jack_nframes_t write_float (Sample* data, jack_nframes_t pos, jack_nframes_t cnt); jack_nframes_t write_float (Sample* data, jack_nframes_t pos, jack_nframes_t cnt);

View file

@ -58,7 +58,6 @@ using namespace PBD;
size_t AudioDiskstream::_working_buffers_size = 0; size_t AudioDiskstream::_working_buffers_size = 0;
Sample* AudioDiskstream::_mixdown_buffer = 0; Sample* AudioDiskstream::_mixdown_buffer = 0;
gain_t* AudioDiskstream::_gain_buffer = 0; gain_t* AudioDiskstream::_gain_buffer = 0;
char* AudioDiskstream::_conversion_buffer = 0;
AudioDiskstream::AudioDiskstream (Session &sess, const string &name, Diskstream::Flag flag) AudioDiskstream::AudioDiskstream (Session &sess, const string &name, Diskstream::Flag flag)
: Diskstream(sess, name, flag) : Diskstream(sess, name, flag)
@ -188,7 +187,6 @@ AudioDiskstream::allocate_working_buffers()
_working_buffers_size = disk_io_frames(); _working_buffers_size = disk_io_frames();
_mixdown_buffer = new Sample[_working_buffers_size]; _mixdown_buffer = new Sample[_working_buffers_size];
_gain_buffer = new gain_t[_working_buffers_size]; _gain_buffer = new gain_t[_working_buffers_size];
_conversion_buffer = new char[_working_buffers_size * 4];
} }
void void
@ -196,11 +194,9 @@ AudioDiskstream::free_working_buffers()
{ {
delete _mixdown_buffer; delete _mixdown_buffer;
delete _gain_buffer; delete _gain_buffer;
delete _conversion_buffer;
_working_buffers_size = 0; _working_buffers_size = 0;
_mixdown_buffer = 0; _mixdown_buffer = 0;
_gain_buffer = 0; _gain_buffer = 0;
_conversion_buffer = 0;
} }
void void
@ -895,7 +891,6 @@ AudioDiskstream::overwrite_existing_buffers ()
{ {
Sample* mixdown_buffer; Sample* mixdown_buffer;
float* gain_buffer; float* gain_buffer;
char * workbuf;
int ret = -1; int ret = -1;
bool reversed = (_visible_speed * _session.transport_speed()) < 0.0f; bool reversed = (_visible_speed * _session.transport_speed()) < 0.0f;
@ -906,7 +901,6 @@ AudioDiskstream::overwrite_existing_buffers ()
mixdown_buffer = new Sample[size]; mixdown_buffer = new Sample[size];
gain_buffer = new float[size]; gain_buffer = new float[size];
workbuf = new char[size*4];
/* reduce size so that we can fill the buffer correctly. */ /* reduce size so that we can fill the buffer correctly. */
size--; size--;
@ -932,8 +926,7 @@ AudioDiskstream::overwrite_existing_buffers ()
jack_nframes_t to_read = size - overwrite_offset; jack_nframes_t to_read = size - overwrite_offset;
if (read ((*chan).playback_buf->buffer() + overwrite_offset, mixdown_buffer, gain_buffer, workbuf, if (read ((*chan).playback_buf->buffer() + overwrite_offset, mixdown_buffer, gain_buffer, start, to_read, *chan, n, reversed)) {
start, to_read, *chan, n, reversed)) {
error << string_compose(_("AudioDiskstream %1: when refilling, cannot read %2 from playlist at frame %3"), error << string_compose(_("AudioDiskstream %1: when refilling, cannot read %2 from playlist at frame %3"),
_id, size, playback_sample) << endmsg; _id, size, playback_sample) << endmsg;
goto out; goto out;
@ -943,7 +936,7 @@ AudioDiskstream::overwrite_existing_buffers ()
cnt -= to_read; cnt -= to_read;
if (read ((*chan).playback_buf->buffer(), mixdown_buffer, gain_buffer, workbuf, if (read ((*chan).playback_buf->buffer(), mixdown_buffer, gain_buffer,
start, cnt, *chan, n, reversed)) { start, cnt, *chan, n, reversed)) {
error << string_compose(_("AudioDiskstream %1: when refilling, cannot read %2 from playlist at frame %3"), error << string_compose(_("AudioDiskstream %1: when refilling, cannot read %2 from playlist at frame %3"),
_id, size, playback_sample) << endmsg; _id, size, playback_sample) << endmsg;
@ -958,7 +951,6 @@ AudioDiskstream::overwrite_existing_buffers ()
pending_overwrite = false; pending_overwrite = false;
delete [] gain_buffer; delete [] gain_buffer;
delete [] mixdown_buffer; delete [] mixdown_buffer;
delete [] workbuf;
return ret; return ret;
} }
@ -1022,7 +1014,7 @@ AudioDiskstream::internal_playback_seek (jack_nframes_t distance)
} }
int int
AudioDiskstream::read (Sample* buf, Sample* mixdown_buffer, float* gain_buffer, char * workbuf, jack_nframes_t& start, jack_nframes_t cnt, AudioDiskstream::read (Sample* buf, Sample* mixdown_buffer, float* gain_buffer, jack_nframes_t& start, jack_nframes_t cnt,
ChannelInfo& channel_info, int channel, bool reversed) ChannelInfo& channel_info, int channel, bool reversed)
{ {
jack_nframes_t this_read = 0; jack_nframes_t this_read = 0;
@ -1079,7 +1071,7 @@ AudioDiskstream::read (Sample* buf, Sample* mixdown_buffer, float* gain_buffer,
this_read = min(cnt,this_read); this_read = min(cnt,this_read);
if (audio_playlist()->read (buf+offset, mixdown_buffer, gain_buffer, workbuf, start, this_read, channel) != this_read) { if (audio_playlist()->read (buf+offset, mixdown_buffer, gain_buffer, start, this_read, channel) != this_read) {
error << string_compose(_("AudioDiskstream %1: cannot read %2 from playlist at frame %3"), _id, this_read, error << string_compose(_("AudioDiskstream %1: cannot read %2 from playlist at frame %3"), _id, this_read,
start) << endmsg; start) << endmsg;
return -1; return -1;
@ -1117,19 +1109,17 @@ AudioDiskstream::do_refill_with_alloc()
{ {
Sample* mix_buf = new Sample[disk_io_chunk_frames]; Sample* mix_buf = new Sample[disk_io_chunk_frames];
float* gain_buf = new float[disk_io_chunk_frames]; float* gain_buf = new float[disk_io_chunk_frames];
char* work_buf = new char[disk_io_chunk_frames * 4];
int ret = _do_refill(mix_buf, gain_buf, work_buf); int ret = _do_refill(mix_buf, gain_buf);
delete [] mix_buf; delete [] mix_buf;
delete [] gain_buf; delete [] gain_buf;
delete [] work_buf;
return ret; return ret;
} }
int int
AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer, char * workbuf) AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer)
{ {
int32_t ret = 0; int32_t ret = 0;
jack_nframes_t to_read; jack_nframes_t to_read;
@ -1143,7 +1133,6 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer, char *
assert(mixdown_buffer); assert(mixdown_buffer);
assert(gain_buffer); assert(gain_buffer);
assert(workbuf);
channels.front().playback_buf->get_write_vector (&vector); channels.front().playback_buf->get_write_vector (&vector);
@ -1284,7 +1273,7 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer, char *
if (to_read) { if (to_read) {
if (read (buf1, mixdown_buffer, gain_buffer, workbuf, file_frame_tmp, to_read, chan, chan_n, reversed)) { if (read (buf1, mixdown_buffer, gain_buffer, file_frame_tmp, to_read, chan, chan_n, reversed)) {
ret = -1; ret = -1;
goto out; goto out;
} }
@ -1302,7 +1291,7 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer, char *
so read some or all of vector.len[1] as well. so read some or all of vector.len[1] as well.
*/ */
if (read (buf2, mixdown_buffer, gain_buffer, workbuf, file_frame_tmp, to_read, chan, chan_n, reversed)) { if (read (buf2, mixdown_buffer, gain_buffer, file_frame_tmp, to_read, chan, chan_n, reversed)) {
ret = -1; ret = -1;
goto out; goto out;
} }
@ -1336,8 +1325,6 @@ AudioDiskstream::_do_refill (Sample* mixdown_buffer, float* gain_buffer, char *
int int
AudioDiskstream::do_flush (Session::RunContext context, bool force_flush) AudioDiskstream::do_flush (Session::RunContext context, bool force_flush)
{ {
char* workbuf = _session.conversion_buffer(context);
uint32_t to_write; uint32_t to_write;
int32_t ret = 0; int32_t ret = 0;
RingBufferNPT<Sample>::rw_vector vector; RingBufferNPT<Sample>::rw_vector vector;
@ -1427,7 +1414,7 @@ AudioDiskstream::do_flush (Session::RunContext context, bool force_flush)
} }
} }
if ((!(*chan).write_source) || (*chan).write_source->write (vector.buf[0], to_write, workbuf) != to_write) { if ((!(*chan).write_source) || (*chan).write_source->write (vector.buf[0], to_write) != to_write) {
error << string_compose(_("AudioDiskstream %1: cannot write to disk"), _id) << endmsg; error << string_compose(_("AudioDiskstream %1: cannot write to disk"), _id) << endmsg;
return -1; return -1;
} }
@ -1444,7 +1431,7 @@ AudioDiskstream::do_flush (Session::RunContext context, bool force_flush)
to_write = min ((jack_nframes_t)(disk_io_chunk_frames - to_write), (jack_nframes_t) vector.len[1]); to_write = min ((jack_nframes_t)(disk_io_chunk_frames - to_write), (jack_nframes_t) vector.len[1]);
if ((*chan).write_source->write (vector.buf[1], to_write, workbuf) != to_write) { if ((*chan).write_source->write (vector.buf[1], to_write) != to_write) {
error << string_compose(_("AudioDiskstream %1: cannot write to disk"), _id) << endmsg; error << string_compose(_("AudioDiskstream %1: cannot write to disk"), _id) << endmsg;
return -1; return -1;
} }

View file

@ -177,7 +177,7 @@ struct RegionSortByLayer {
}; };
jack_nframes_t jack_nframes_t
AudioPlaylist::read (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, char * workbuf, jack_nframes_t start, AudioPlaylist::read (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, jack_nframes_t start,
jack_nframes_t cnt, unsigned chan_n) jack_nframes_t cnt, unsigned chan_n)
{ {
jack_nframes_t ret = cnt; jack_nframes_t ret = cnt;
@ -250,12 +250,12 @@ AudioPlaylist::read (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, ch
for (vector<Region*>::iterator i = r.begin(); i != r.end(); ++i) { for (vector<Region*>::iterator i = r.begin(); i != r.end(); ++i) {
AudioRegion* const ar = dynamic_cast<AudioRegion*>(*i); AudioRegion* const ar = dynamic_cast<AudioRegion*>(*i);
assert(ar); assert(ar);
ar->read_at (buf, mixdown_buffer, gain_buffer, workbuf, start, cnt, chan_n, read_frames, skip_frames); ar->read_at (buf, mixdown_buffer, gain_buffer, start, cnt, chan_n, read_frames, skip_frames);
_read_data_count += ar->read_data_count(); _read_data_count += ar->read_data_count();
} }
for (vector<Crossfade*>::iterator i = x.begin(); i != x.end(); ++i) { for (vector<Crossfade*>::iterator i = x.begin(); i != x.end(); ++i) {
(*i)->read_at (buf, mixdown_buffer, gain_buffer, workbuf, start, cnt, chan_n); (*i)->read_at (buf, mixdown_buffer, gain_buffer, start, cnt, chan_n);
/* don't JACK up _read_data_count, since its the same data as we just /* don't JACK up _read_data_count, since its the same data as we just
read from the regions, and the OS should handle that for us. read from the regions, and the OS should handle that for us.

View file

@ -627,7 +627,7 @@ AudioTrack::silent_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jac
} }
int int
AudioTrack::export_stuff (vector<Sample*>& buffers, char * workbuf, uint32_t nbufs, jack_nframes_t start, jack_nframes_t nframes) AudioTrack::export_stuff (vector<Sample*>& buffers, uint32_t nbufs, jack_nframes_t start, jack_nframes_t nframes)
{ {
gain_t gain_automation[nframes]; gain_t gain_automation[nframes];
gain_t gain_buffer[nframes]; gain_t gain_buffer[nframes];
@ -645,7 +645,7 @@ AudioTrack::export_stuff (vector<Sample*>& buffers, char * workbuf, uint32_t nbu
AudioPlaylist* const apl = dynamic_cast<AudioPlaylist*>(diskstream.playlist()); AudioPlaylist* const apl = dynamic_cast<AudioPlaylist*>(diskstream.playlist());
assert(apl); assert(apl);
if (apl->read (buffers[0], mix_buffer, gain_buffer, workbuf, start, nframes) != nframes) { if (apl->read (buffers[0], mix_buffer, gain_buffer, start, nframes) != nframes) {
return -1; return -1;
} }
@ -655,7 +655,7 @@ AudioTrack::export_stuff (vector<Sample*>& buffers, char * workbuf, uint32_t nbu
++bi; ++bi;
for (; bi != buffers.end(); ++bi, ++n) { for (; bi != buffers.end(); ++bi, ++n) {
if (n < diskstream.n_channels()) { if (n < diskstream.n_channels()) {
if (apl->read ((*bi), mix_buffer, gain_buffer, workbuf, start, nframes, n) != nframes) { if (apl->read ((*bi), mix_buffer, gain_buffer, start, nframes, n) != nframes) {
return -1; return -1;
} }
b = (*bi); b = (*bi);

View file

@ -466,22 +466,22 @@ AudioRegion::read_peaks (PeakData *buf, jack_nframes_t npeaks, jack_nframes_t of
} }
jack_nframes_t jack_nframes_t
AudioRegion::read_at (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, char * workbuf, jack_nframes_t position, AudioRegion::read_at (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, jack_nframes_t position,
jack_nframes_t cnt, jack_nframes_t cnt,
uint32_t chan_n, jack_nframes_t read_frames, jack_nframes_t skip_frames) const uint32_t chan_n, jack_nframes_t read_frames, jack_nframes_t skip_frames) const
{ {
return _read_at (sources, buf, mixdown_buffer, gain_buffer, workbuf, position, cnt, chan_n, read_frames, skip_frames); return _read_at (sources, buf, mixdown_buffer, gain_buffer, position, cnt, chan_n, read_frames, skip_frames);
} }
jack_nframes_t jack_nframes_t
AudioRegion::master_read_at (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, char * workbuf, jack_nframes_t position, AudioRegion::master_read_at (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, jack_nframes_t position,
jack_nframes_t cnt, uint32_t chan_n) const jack_nframes_t cnt, uint32_t chan_n) const
{ {
return _read_at (master_sources, buf, mixdown_buffer, gain_buffer, workbuf, position, cnt, chan_n, 0, 0); return _read_at (master_sources, buf, mixdown_buffer, gain_buffer, position, cnt, chan_n, 0, 0);
} }
jack_nframes_t jack_nframes_t
AudioRegion::_read_at (const SourceList& srcs, Sample *buf, Sample *mixdown_buffer, float *gain_buffer, char * workbuf, AudioRegion::_read_at (const SourceList& srcs, Sample *buf, Sample *mixdown_buffer, float *gain_buffer,
jack_nframes_t position, jack_nframes_t cnt, jack_nframes_t position, jack_nframes_t cnt,
uint32_t chan_n, jack_nframes_t read_frames, jack_nframes_t skip_frames) const uint32_t chan_n, jack_nframes_t read_frames, jack_nframes_t skip_frames) const
{ {
@ -526,7 +526,7 @@ AudioRegion::_read_at (const SourceList& srcs, Sample *buf, Sample *mixdown_buff
_read_data_count = 0; _read_data_count = 0;
if (srcs[chan_n]->read (mixdown_buffer, _start + internal_offset, to_read, workbuf) != to_read) { if (srcs[chan_n]->read (mixdown_buffer, _start + internal_offset, to_read) != to_read) {
return 0; /* "read nothing" */ return 0; /* "read nothing" */
} }
@ -1188,7 +1188,7 @@ AudioRegion::exportme (Session& session, AudioExportSpecification& spec)
if (spec.channels == 1) { if (spec.channels == 1) {
if (sources.front()->read (spec.dataF, _start + spec.pos, to_read, 0) != to_read) { if (sources.front()->read (spec.dataF, _start + spec.pos, to_read) != to_read) {
goto out; goto out;
} }
@ -1198,7 +1198,7 @@ AudioRegion::exportme (Session& session, AudioExportSpecification& spec)
for (uint32_t chan = 0; chan < spec.channels; ++chan) { for (uint32_t chan = 0; chan < spec.channels; ++chan) {
if (sources[chan]->read (buf, _start + spec.pos, to_read, 0) != to_read) { if (sources[chan]->read (buf, _start + spec.pos, to_read) != to_read) {
goto out; goto out;
} }
@ -1260,7 +1260,6 @@ AudioRegion::normalize_to (float target_dB)
{ {
const jack_nframes_t blocksize = 64 * 1024; const jack_nframes_t blocksize = 64 * 1024;
Sample buf[blocksize]; Sample buf[blocksize];
char workbuf[blocksize * 4];
jack_nframes_t fpos; jack_nframes_t fpos;
jack_nframes_t fend; jack_nframes_t fend;
jack_nframes_t to_read; jack_nframes_t to_read;
@ -1289,7 +1288,7 @@ AudioRegion::normalize_to (float target_dB)
/* read it in */ /* read it in */
if (source (n).read (buf, fpos, to_read, workbuf) != to_read) { if (source (n).read (buf, fpos, to_read) != to_read) {
return; return;
} }

View file

@ -379,17 +379,17 @@ AudioSource::initialize_peakfile (bool newfile, string audio_path)
} }
jack_nframes_t jack_nframes_t
AudioSource::read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const AudioSource::read (Sample *dst, jack_nframes_t start, jack_nframes_t cnt) const
{ {
Glib::Mutex::Lock lm (_lock); Glib::Mutex::Lock lm (_lock);
return read_unlocked (dst, start, cnt, workbuf); return read_unlocked (dst, start, cnt);
} }
jack_nframes_t jack_nframes_t
AudioSource::write (Sample *dst, jack_nframes_t cnt, char * workbuf) AudioSource::write (Sample *dst, jack_nframes_t cnt)
{ {
Glib::Mutex::Lock lm (_lock); Glib::Mutex::Lock lm (_lock);
return write_unlocked (dst, cnt, workbuf); return write_unlocked (dst, cnt);
} }
int int
@ -406,7 +406,6 @@ AudioSource::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t
int ret = -1; int ret = -1;
PeakData* staging = 0; PeakData* staging = 0;
Sample* raw_staging = 0; Sample* raw_staging = 0;
char * workbuf = 0;
int peakfile = -1; int peakfile = -1;
expected_peaks = (cnt / (double) frames_per_peak); expected_peaks = (cnt / (double) frames_per_peak);
@ -445,9 +444,8 @@ AudioSource::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t
*/ */
Sample* raw_staging = new Sample[cnt]; Sample* raw_staging = new Sample[cnt];
workbuf = new char[cnt*4];
if (read_unlocked (raw_staging, start, cnt, workbuf) != cnt) { if (read_unlocked (raw_staging, start, cnt) != cnt) {
error << _("cannot read sample data for unscaled peak computation") << endmsg; error << _("cannot read sample data for unscaled peak computation") << endmsg;
return -1; return -1;
} }
@ -458,7 +456,6 @@ AudioSource::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t
} }
delete [] raw_staging; delete [] raw_staging;
delete [] workbuf;
return 0; return 0;
} }
@ -624,7 +621,6 @@ AudioSource::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t
jack_nframes_t nvisual_peaks = 0; jack_nframes_t nvisual_peaks = 0;
jack_nframes_t chunksize = (jack_nframes_t) min (cnt, (jack_nframes_t) 4096); jack_nframes_t chunksize = (jack_nframes_t) min (cnt, (jack_nframes_t) 4096);
raw_staging = new Sample[chunksize]; raw_staging = new Sample[chunksize];
workbuf = new char[chunksize *4];
jack_nframes_t frame_pos = start; jack_nframes_t frame_pos = start;
double pixel_pos = floor (frame_pos / samples_per_visual_peak); double pixel_pos = floor (frame_pos / samples_per_visual_peak);
@ -640,7 +636,7 @@ AudioSource::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t
to_read = min (chunksize, (_length - current_frame)); to_read = min (chunksize, (_length - current_frame));
if ((frames_read = read_unlocked (raw_staging, current_frame, to_read, workbuf)) == 0) { if ((frames_read = read_unlocked (raw_staging, current_frame, to_read)) == 0) {
error << string_compose(_("AudioSource[%1]: peak read - cannot read %2 samples at offset %3") error << string_compose(_("AudioSource[%1]: peak read - cannot read %2 samples at offset %3")
, _name, to_read, current_frame) , _name, to_read, current_frame)
<< endmsg; << endmsg;
@ -688,10 +684,6 @@ AudioSource::read_peaks (PeakData *peaks, jack_nframes_t npeaks, jack_nframes_t
delete [] raw_staging; delete [] raw_staging;
} }
if (workbuf) {
delete [] workbuf;
}
return ret; return ret;
} }
@ -760,7 +752,6 @@ AudioSource::do_build_peak (jack_nframes_t first_frame, jack_nframes_t cnt)
Sample xmin, xmax; Sample xmin, xmax;
uint32_t peaki; uint32_t peaki;
PeakData* peakbuf; PeakData* peakbuf;
char * workbuf = 0;
jack_nframes_t frames_read; jack_nframes_t frames_read;
jack_nframes_t frames_to_read; jack_nframes_t frames_to_read;
off_t first_peak_byte; off_t first_peak_byte;
@ -781,8 +772,6 @@ AudioSource::do_build_peak (jack_nframes_t first_frame, jack_nframes_t cnt)
peakbuf = new PeakData[(cnt/frames_per_peak)+1]; peakbuf = new PeakData[(cnt/frames_per_peak)+1];
peaki = 0; peaki = 0;
workbuf = new char[max(frames_per_peak, cnt) * 4];
if ((peakfile = ::open (peakpath.c_str(), O_RDWR|O_CREAT, 0664)) < 0) { if ((peakfile = ::open (peakpath.c_str(), O_RDWR|O_CREAT, 0664)) < 0) {
error << string_compose(_("AudioSource: cannot open peakpath \"%1\" (%2)"), peakpath, strerror (errno)) << endmsg; error << string_compose(_("AudioSource: cannot open peakpath \"%1\" (%2)"), peakpath, strerror (errno)) << endmsg;
return -1; return -1;
@ -794,7 +783,7 @@ AudioSource::do_build_peak (jack_nframes_t first_frame, jack_nframes_t cnt)
/* lock for every read */ /* lock for every read */
if ((frames_read = read (buf, current_frame, frames_to_read, workbuf)) != frames_to_read) { if ((frames_read = read (buf, current_frame, frames_to_read)) != frames_to_read) {
error << string_compose(_("%1: could not write read raw data for peak computation (%2)"), _name, strerror (errno)) << endmsg; error << string_compose(_("%1: could not write read raw data for peak computation (%2)"), _name, strerror (errno)) << endmsg;
goto out; goto out;
} }
@ -831,8 +820,6 @@ AudioSource::do_build_peak (jack_nframes_t first_frame, jack_nframes_t cnt)
if (peakfile >= 0) { if (peakfile >= 0) {
close (peakfile); close (peakfile);
} }
if (workbuf)
delete [] workbuf;
return ret; return ret;
} }

View file

@ -236,7 +236,7 @@ Configuration::set_state (const XMLNode& root)
} }
} }
AudioDiskstream::set_disk_io_chunk_frames (minimum_disk_io_bytes.get() / sizeof (Sample)); Diskstream::set_disk_io_chunk_frames (minimum_disk_io_bytes.get() / sizeof (Sample));
return 0; return 0;
} }

View file

@ -153,7 +153,7 @@ CoreAudioSource::~CoreAudioSource ()
} }
jack_nframes_t jack_nframes_t
CoreAudioSource::read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const CoreAudioSource::read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt) const
{ {
OSStatus err = noErr; OSStatus err = noErr;

View file

@ -402,7 +402,7 @@ Crossfade::compute (AudioRegion& a, AudioRegion& b, CrossfadeModel model)
jack_nframes_t jack_nframes_t
Crossfade::read_at (Sample *buf, Sample *mixdown_buffer, Crossfade::read_at (Sample *buf, Sample *mixdown_buffer,
float *gain_buffer, char * workbuf, jack_nframes_t start, jack_nframes_t cnt, uint32_t chan_n, float *gain_buffer, jack_nframes_t start, jack_nframes_t cnt, uint32_t chan_n,
jack_nframes_t read_frames, jack_nframes_t skip_frames) jack_nframes_t read_frames, jack_nframes_t skip_frames)
{ {
jack_nframes_t offset; jack_nframes_t offset;
@ -438,8 +438,8 @@ Crossfade::read_at (Sample *buf, Sample *mixdown_buffer,
offset = start - _position; offset = start - _position;
_out->read_at (crossfade_buffer_out, mixdown_buffer, gain_buffer, workbuf, start, to_write, chan_n, read_frames, skip_frames); _out->read_at (crossfade_buffer_out, mixdown_buffer, gain_buffer, start, to_write, chan_n, read_frames, skip_frames);
_in->read_at (crossfade_buffer_in, mixdown_buffer, gain_buffer, workbuf, start, to_write, chan_n, read_frames, skip_frames); _in->read_at (crossfade_buffer_in, mixdown_buffer, gain_buffer, start, to_write, chan_n, read_frames, skip_frames);
float* fiv = new float[to_write]; float* fiv = new float[to_write];
float* fov = new float[to_write]; float* fov = new float[to_write];

View file

@ -158,7 +158,7 @@ DestructiveFileSource::clear_capture_marks ()
} }
jack_nframes_t jack_nframes_t
DestructiveFileSource::crossfade (Sample* data, jack_nframes_t cnt, int fade_in, char * workbuf) DestructiveFileSource::crossfade (Sample* data, jack_nframes_t cnt, int fade_in)
{ {
jack_nframes_t xfade = min (xfade_frames, cnt); jack_nframes_t xfade = min (xfade_frames, cnt);
jack_nframes_t nofade = cnt - xfade; jack_nframes_t nofade = cnt - xfade;
@ -272,7 +272,7 @@ DestructiveFileSource::crossfade (Sample* data, jack_nframes_t cnt, int fade_in,
} }
jack_nframes_t jack_nframes_t
DestructiveFileSource::write_unlocked (Sample* data, jack_nframes_t cnt, char * workbuf) DestructiveFileSource::write_unlocked (Sample* data, jack_nframes_t cnt)
{ {
jack_nframes_t old_file_pos; jack_nframes_t old_file_pos;
@ -297,7 +297,7 @@ DestructiveFileSource::write_unlocked (Sample* data, jack_nframes_t cnt, char *
jack_nframes_t ofilepos = file_pos; jack_nframes_t ofilepos = file_pos;
// fade in // fade in
if (crossfade (data, subcnt, 1, workbuf) != subcnt) { if (crossfade (data, subcnt, 1) != subcnt) {
return 0; return 0;
} }
@ -306,7 +306,7 @@ DestructiveFileSource::write_unlocked (Sample* data, jack_nframes_t cnt, char *
// fade out // fade out
subcnt = cnt - subcnt; subcnt = cnt - subcnt;
if (crossfade (tmpdata, subcnt, 0, workbuf) != subcnt) { if (crossfade (tmpdata, subcnt, 0) != subcnt) {
return 0; return 0;
} }
@ -324,7 +324,7 @@ DestructiveFileSource::write_unlocked (Sample* data, jack_nframes_t cnt, char *
/* move to the correct location place */ /* move to the correct location place */
file_pos = capture_start_frame; file_pos = capture_start_frame;
if (crossfade (data, cnt, 1, workbuf) != cnt) { if (crossfade (data, cnt, 1) != cnt) {
return 0; return 0;
} }
@ -337,7 +337,7 @@ DestructiveFileSource::write_unlocked (Sample* data, jack_nframes_t cnt, char *
_capture_start = false; _capture_start = false;
_capture_end = false; _capture_end = false;
if (crossfade (data, cnt, 0, workbuf) != cnt) { if (crossfade (data, cnt, 0) != cnt) {
return 0; return 0;
} }

View file

@ -56,7 +56,12 @@ using namespace std;
using namespace ARDOUR; using namespace ARDOUR;
using namespace PBD; using namespace PBD;
jack_nframes_t Diskstream::disk_io_chunk_frames = 0; /* XXX This goes uninitialized when there is no ~/.ardour2 directory.
* I can't figure out why, so this will do for now (just stole the
* default from configuration_vars.h). 0 is not a good value for
* allocating buffer sizes..
*/
jack_nframes_t Diskstream::disk_io_chunk_frames = 1024 * 256;
sigc::signal<void,Diskstream*> Diskstream::DiskstreamCreated; sigc::signal<void,Diskstream*> Diskstream::DiskstreamCreated;
sigc::signal<void,list<Source*>*> Diskstream::DeleteSources; sigc::signal<void,list<Source*>*> Diskstream::DeleteSources;

View file

@ -57,7 +57,6 @@ Session::import_audiofile (import_status& status)
SF_INFO info; SF_INFO info;
float *data = 0; float *data = 0;
Sample **channel_data = 0; Sample **channel_data = 0;
char * workbuf = 0;
long nfiles = 0; long nfiles = 0;
long n; long n;
string basepath; string basepath;
@ -156,7 +155,6 @@ Session::import_audiofile (import_status& status)
data = new float[BLOCKSIZE * info.channels]; data = new float[BLOCKSIZE * info.channels];
channel_data = new Sample * [ info.channels ]; channel_data = new Sample * [ info.channels ];
workbuf = new char[BLOCKSIZE * 4];
for (n = 0; n < info.channels; ++n) { for (n = 0; n < info.channels; ++n) {
channel_data[n] = new Sample[BLOCKSIZE]; channel_data[n] = new Sample[BLOCKSIZE];
@ -188,7 +186,7 @@ Session::import_audiofile (import_status& status)
/* flush to disk */ /* flush to disk */
for (chn = 0; chn < info.channels; ++chn) { for (chn = 0; chn < info.channels; ++chn) {
newfiles[chn]->write (channel_data[chn], nread, workbuf); newfiles[chn]->write (channel_data[chn], nread);
} }
so_far += nread; so_far += nread;
@ -255,9 +253,6 @@ Session::import_audiofile (import_status& status)
if (data) { if (data) {
delete [] data; delete [] data;
} }
if (workbuf) {
delete [] workbuf;
}
if (channel_data) { if (channel_data) {
for (n = 0; n < info.channels; ++n) { for (n = 0; n < info.channels; ++n) {

View file

@ -49,7 +49,6 @@ Reverse::run (AudioRegion& region)
AudioRegion::SourceList::iterator si; AudioRegion::SourceList::iterator si;
const jack_nframes_t blocksize = 256 * 1048; const jack_nframes_t blocksize = 256 * 1048;
Sample buf[blocksize]; Sample buf[blocksize];
char * workbuf = 0;;
jack_nframes_t fpos; jack_nframes_t fpos;
jack_nframes_t fend; jack_nframes_t fend;
jack_nframes_t fstart; jack_nframes_t fstart;
@ -62,8 +61,6 @@ Reverse::run (AudioRegion& region)
goto out; goto out;
} }
workbuf = new char[blocksize * 4];
fend = region.start() + region.length(); fend = region.start() + region.length();
fstart = region.start(); fstart = region.start();
@ -85,7 +82,7 @@ Reverse::run (AudioRegion& region)
/* read it in */ /* read it in */
if (region.source (n).read (buf, fpos, to_read, workbuf) != to_read) { if (region.source (n).read (buf, fpos, to_read) != to_read) {
goto out; goto out;
} }
@ -97,7 +94,7 @@ Reverse::run (AudioRegion& region)
/* write it out */ /* write it out */
if ((*si)->write (buf, to_read, workbuf) != to_read) { if ((*si)->write (buf, to_read) != to_read) {
goto out; goto out;
} }
} }
@ -123,9 +120,6 @@ Reverse::run (AudioRegion& region)
delete *si; delete *si;
} }
} }
if (workbuf) {
delete [] workbuf;
}
return ret; return ret;
} }

View file

@ -394,10 +394,6 @@ Session::~Session ()
free(*i); free(*i);
} }
for (map<RunContext,char*>::iterator i = _conversion_buffers.begin(); i != _conversion_buffers.end(); ++i) {
delete [] (i->second);
}
AudioDiskstream::free_working_buffers(); AudioDiskstream::free_working_buffers();
#undef TRACK_DESTRUCTION #undef TRACK_DESTRUCTION
@ -3594,7 +3590,6 @@ Session::write_one_audio_track (AudioTrack& track, jack_nframes_t start, jack_nf
jack_nframes_t this_chunk; jack_nframes_t this_chunk;
jack_nframes_t to_do; jack_nframes_t to_do;
vector<Sample*> buffers; vector<Sample*> buffers;
char * workbuf = 0;
// any bigger than this seems to cause stack overflows in called functions // any bigger than this seems to cause stack overflows in called functions
const jack_nframes_t chunk_size = (128 * 1024)/4; const jack_nframes_t chunk_size = (128 * 1024)/4;
@ -3664,13 +3659,11 @@ Session::write_one_audio_track (AudioTrack& track, jack_nframes_t start, jack_nf
buffers.push_back (b); buffers.push_back (b);
} }
workbuf = new char[chunk_size * 4];
while (to_do && !itt.cancel) { while (to_do && !itt.cancel) {
this_chunk = min (to_do, chunk_size); this_chunk = min (to_do, chunk_size);
if (track.export_stuff (buffers, workbuf, nchans, start, this_chunk)) { if (track.export_stuff (buffers, nchans, start, this_chunk)) {
goto out; goto out;
} }
@ -3679,7 +3672,7 @@ Session::write_one_audio_track (AudioTrack& track, jack_nframes_t start, jack_nf
AudioFileSource* afs = dynamic_cast<AudioFileSource*>(*src); AudioFileSource* afs = dynamic_cast<AudioFileSource*>(*src);
if (afs) { if (afs) {
if (afs->write (buffers[n], this_chunk, workbuf) != this_chunk) { if (afs->write (buffers[n], this_chunk) != this_chunk) {
goto out; goto out;
} }
} }
@ -3733,10 +3726,6 @@ Session::write_one_audio_track (AudioTrack& track, jack_nframes_t start, jack_nf
free(*i); free(*i);
} }
if (workbuf) {
delete [] workbuf;
}
g_atomic_int_set (&processing_prohibited, 0); g_atomic_int_set (&processing_prohibited, 0);
itt.done = true; itt.done = true;

View file

@ -191,9 +191,6 @@ Session::first_stage_init (string fullpath, string snapshot_name)
xfade_model = ShortCrossfade; xfade_model = ShortCrossfade;
destructive_index = 0; destructive_index = 0;
/* allocate conversion buffers */
_conversion_buffers[ButlerContext] = new char[AudioDiskstream::disk_io_frames() * 4];
_conversion_buffers[TransportContext] = new char[AudioDiskstream::disk_io_frames() * 4];
AudioDiskstream::allocate_working_buffers(); AudioDiskstream::allocate_working_buffers();
/* default short fade = 15ms */ /* default short fade = 15ms */

View file

@ -96,7 +96,6 @@ Session::tempoize_region (TimeStretchRequest& tsr)
for (uint32_t i = 0; i < sources.size(); ++i) { for (uint32_t i = 0; i < sources.size(); ++i) {
gain_t gain_buffer[bufsize]; gain_t gain_buffer[bufsize];
Sample buffer[bufsize]; Sample buffer[bufsize];
char workbuf[bufsize*4];
jack_nframes_t pos = 0; jack_nframes_t pos = 0;
jack_nframes_t this_read = 0; jack_nframes_t this_read = 0;
@ -110,7 +109,7 @@ Session::tempoize_region (TimeStretchRequest& tsr)
not the ones currently in use, in case it's already been not the ones currently in use, in case it's already been
subject to timefx. */ subject to timefx. */
if ((this_read = tsr.region->master_read_at (buffer, buffer, gain_buffer, workbuf, pos + tsr.region->position(), this_time)) != this_time) { if ((this_read = tsr.region->master_read_at (buffer, buffer, gain_buffer, pos + tsr.region->position(), this_time)) != this_time) {
error << string_compose (_("tempoize: error reading data from %1"), sources[i]->name()) << endmsg; error << string_compose (_("tempoize: error reading data from %1"), sources[i]->name()) << endmsg;
goto out; goto out;
} }
@ -123,7 +122,7 @@ Session::tempoize_region (TimeStretchRequest& tsr)
st.putSamples (buffer, this_read); st.putSamples (buffer, this_read);
while ((this_read = st.receiveSamples (buffer, bufsize)) > 0 && tsr.running) { while ((this_read = st.receiveSamples (buffer, bufsize)) > 0 && tsr.running) {
if (sources[i]->write (buffer, this_read, workbuf) != this_read) { if (sources[i]->write (buffer, this_read) != this_read) {
error << string_compose (_("error writing tempo-adjusted data to %1"), sources[i]->name()) << endmsg; error << string_compose (_("error writing tempo-adjusted data to %1"), sources[i]->name()) << endmsg;
goto out; goto out;
} }
@ -135,7 +134,7 @@ Session::tempoize_region (TimeStretchRequest& tsr)
} }
while (tsr.running && (this_read = st.receiveSamples (buffer, bufsize)) > 0) { while (tsr.running && (this_read = st.receiveSamples (buffer, bufsize)) > 0) {
if (sources[i]->write (buffer, this_read, workbuf) != this_read) { if (sources[i]->write (buffer, this_read) != this_read) {
error << string_compose (_("error writing tempo-adjusted data to %1"), sources[i]->name()) << endmsg; error << string_compose (_("error writing tempo-adjusted data to %1"), sources[i]->name()) << endmsg;
goto out; goto out;
} }

View file

@ -292,7 +292,7 @@ SndFileSource::sample_rate () const
} }
jack_nframes_t jack_nframes_t
SndFileSource::read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt, char * workbuf) const SndFileSource::read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t cnt) const
{ {
int32_t nread; int32_t nread;
float *ptr; float *ptr;
@ -367,7 +367,7 @@ SndFileSource::read_unlocked (Sample *dst, jack_nframes_t start, jack_nframes_t
} }
jack_nframes_t jack_nframes_t
SndFileSource::write_unlocked (Sample *data, jack_nframes_t cnt, char * workbuf) SndFileSource::write_unlocked (Sample *data, jack_nframes_t cnt)
{ {
if (!writable()) { if (!writable()) {
return 0; return 0;