diff options
Diffstat (limited to 'libs/ardour/audioregion.cc')
-rw-r--r-- | libs/ardour/audioregion.cc | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc index 8113b261f9..a3535565dd 100644 --- a/libs/ardour/audioregion.cc +++ b/libs/ardour/audioregion.cc @@ -25,6 +25,7 @@ #include <set> #include <boost/scoped_array.hpp> +#include <boost/shared_ptr.hpp> #include <glibmm/threads.h> @@ -49,6 +50,11 @@ #include "ardour/parameter_descriptor.h" #include "ardour/progress.h" +#include "ardour/sndfilesource.h" +#ifdef HAVE_COREAUDIO +#include "ardour/coreaudiosource.h" +#endif // HAVE_COREAUDIO + #include "i18n.h" #include <locale.h> @@ -1562,6 +1568,34 @@ AudioRegion::audio_source (uint32_t n) const return boost::dynamic_pointer_cast<AudioSource>(source(n)); } +uint32_t +AudioRegion::get_related_audio_file_channel_count () const +{ + uint32_t chan_count = 0; + for (SourceList::const_iterator i = _sources.begin(); i != _sources.end(); ++i) { + + boost::shared_ptr<SndFileSource> sndf = boost::dynamic_pointer_cast<SndFileSource>(*i); + if (sndf ) { + + if (sndf->channel_count() > chan_count) { + chan_count = sndf->channel_count(); + } + } +#ifdef HAVE_COREAUDIO + else { + boost::shared_ptr<CoreAudioSource> cauf = boost::dynamic_pointer_cast<CoreAudioSource>(*i); + if (cauf) { + if (cauf->channel_count() > chan_count) { + chan_count = cauf->channel_count(); + } + } + } +#endif // HAVE_COREAUDIO + } + + return chan_count; +} + int AudioRegion::adjust_transients (frameoffset_t delta) { |