tentative fix for a crash that occurs when switching backends.
Session::process() returns early with Session::_silent set to true. AudioBuffer::set_data() was never set for (at least) the LTC output port. PortManager::cycle_end() calls AudioBuffer::silence() which used to assume that get_buffer() must have been called. But it was not, because that should have happened in Session::process(). So check AudioBuffer::data() and call get_buffer() if required.
This commit is contained in:
parent
9c323c59ef
commit
78296d2c18
@ -220,7 +220,13 @@ public:
|
||||
*/
|
||||
bool check_silence (pframes_t nframes, pframes_t& n) const;
|
||||
|
||||
void prepare () { _written = false; _silent = false; }
|
||||
void prepare () {
|
||||
if (!_owns_data) {
|
||||
_data = 0;
|
||||
}
|
||||
_written = false;
|
||||
_silent = false;
|
||||
}
|
||||
bool written() const { return _written; }
|
||||
void set_written(bool w) { _written = w; }
|
||||
|
||||
|
@ -59,8 +59,11 @@ void
|
||||
AudioPort::cycle_end (pframes_t nframes)
|
||||
{
|
||||
if (sends_output() && !_buffer->written()) {
|
||||
if (_buffer->capacity() >= nframes) {
|
||||
_buffer->silence (nframes);
|
||||
if (!_buffer->data (0)) {
|
||||
get_audio_buffer (nframes);
|
||||
}
|
||||
if (_buffer->capacity() >= nframes) {
|
||||
_buffer->silence (nframes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user