From cf04f821ead7f0ed3fc6d0695c7155033579b5ac Mon Sep 17 00:00:00 2001 From: Darby Johnston Date: Fri, 12 Jul 2024 13:58:46 -0700 Subject: [PATCH] Restrict audio channel conversion --- lib/tlTimeline/Player.cpp | 3 +++ lib/tlTimeline/PlayerPrivate.cpp | 12 ++++++++++++ lib/tlTimeline/PlayerPrivate.h | 3 +++ 3 files changed, 18 insertions(+) diff --git a/lib/tlTimeline/Player.cpp b/lib/tlTimeline/Player.cpp index 89d1d605..e69ec9b7 100644 --- a/lib/tlTimeline/Player.cpp +++ b/lib/tlTimeline/Player.cpp @@ -157,6 +157,9 @@ namespace tl if (p.thread.rtAudio && !audioSystem->getDevices().empty()) { p.audioThread.info = audioSystem->getDefaultOutputInfo(); + p.audioThread.info.channelCount = p.getAudioChannelCount( + p.ioInfo.audio, + p.audioThread.info); if (p.audioThread.info.channelCount > 0 && p.audioThread.info.dataType != audio::DataType::None && p.audioThread.info.sampleRate > 0) diff --git a/lib/tlTimeline/PlayerPrivate.cpp b/lib/tlTimeline/PlayerPrivate.cpp index 6bcb471b..ba1f882b 100644 --- a/lib/tlTimeline/PlayerPrivate.cpp +++ b/lib/tlTimeline/PlayerPrivate.cpp @@ -518,6 +518,18 @@ namespace tl } } + size_t Player::Private::getAudioChannelCount( + const audio::Info& input, + const audio::Info& output) + { + size_t out = 2; + if (input.channelCount == output.channelCount) + { + out = output.channelCount; + } + return out; + } + void Player::Private::resetAudioTime() { { diff --git a/lib/tlTimeline/PlayerPrivate.h b/lib/tlTimeline/PlayerPrivate.h index 512a8bbe..4d8db765 100644 --- a/lib/tlTimeline/PlayerPrivate.h +++ b/lib/tlTimeline/PlayerPrivate.h @@ -31,6 +31,9 @@ namespace tl void clearCache(); void cacheUpdate(); + static size_t getAudioChannelCount( + const audio::Info& input, + const audio::Info& output); void resetAudioTime(); #if defined(TLRENDER_AUDIO) static int rtAudioCallback(