From 417f23ba4f8f625cff3a0cdc8a7b01d10415cece Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 16 Apr 2010 15:14:59 +0000 Subject: [PATCH] when a region has less channels than its diskstream needs, read a relevant channel instead (this makes mono regions in stereo tracks become effectively multi-mono) git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@6915 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/audiosource.h | 1 + libs/ardour/audioregion.cc | 13 ++++++++++--- libs/ardour/audiosource.cc | 12 ++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) 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; + } +}