diff --git a/libs/ardour/ardour/audiosource.h b/libs/ardour/ardour/audiosource.h index 20acd9fcd8..ef455f9735 100644 --- a/libs/ardour/ardour/audiosource.h +++ b/libs/ardour/ardour/audiosource.h @@ -90,6 +90,7 @@ class AudioSource : public Source, public boost::enable_shared_from_thisread (mixdown_buffer, _start + internal_offset, to_read) != to_read) { + return 0; /* "read nothing" */ + } + + /* adjust read data count appropriately since this was a duplicate read */ + srcs[channel]->dec_read_data_count (to_read); + } if (rops & ReadOpsFades) { diff --git a/libs/ardour/audiosource.cc b/libs/ardour/audiosource.cc index fbac57dc7c..2fc7fd18cd 100644 --- a/libs/ardour/audiosource.cc +++ b/libs/ardour/audiosource.cc @@ -1015,3 +1015,15 @@ AudioSource::check_for_analysis_data_on_disk () return ok; } + +void +AudioSource::dec_read_data_count (nframes_t cnt) +{ + uint32_t val = cnt * sizeof (Sample); + + if (val < _read_data_count) { + _read_data_count -= val; + } else { + _read_data_count = 0; + } +}