From 6d1378cb2018e7bef230abe74ad8ca4bc0ada9f1 Mon Sep 17 00:00:00 2001 From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> Date: Mon, 31 Dec 2018 11:58:25 -0500 Subject: [PATCH] portaudiolayer: calculate frames to copy with number of channels - also honor isCaptureMuted Change-Id: Ic0c17ea2acecf8d773fc34f3487b0c12c0706247 --- src/media/audio/portaudio/portaudiolayer.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/media/audio/portaudio/portaudiolayer.cpp b/src/media/audio/portaudio/portaudiolayer.cpp index 52c350f536..3703fe1b85 100644 --- a/src/media/audio/portaudio/portaudiolayer.cpp +++ b/src/media/audio/portaudio/portaudiolayer.cpp @@ -268,13 +268,14 @@ PortAudioLayer::PortAudioLayerImpl::paOutputCallback(PortAudioLayer& parent, (void) timeInfo; (void) statusFlags; - const auto& ringBuff = parent.getToRing(parent.audioFormat_, framesPerBuffer); - const auto& playBuff = parent.getToPlay(parent.audioFormat_, framesPerBuffer); - auto toPlay = ringBuff ? ringBuff : playBuff; - if (!toPlay) + auto toPlay = parent.getPlayback(parent.audioFormat_, framesPerBuffer); + if (!toPlay) { + std::fill_n(outputBuffer, framesPerBuffer * parent.audioFormat_.nb_channels, 0); return paContinue; + } - std::copy_n((AudioSample*)toPlay->pointer()->extended_data[0], toPlay->pointer()->nb_samples, outputBuffer); + auto nFrames = toPlay->pointer()->nb_samples * toPlay->pointer()->channels; + std::copy_n((AudioSample*)toPlay->pointer()->extended_data[0], nFrames, outputBuffer); return paContinue; } @@ -298,8 +299,11 @@ PortAudioLayer::PortAudioLayerImpl::paInputCallback(PortAudioLayer& parent, } auto inBuff = std::make_unique<AudioFrame>(parent.audioInputFormat_, framesPerBuffer); - std::copy_n(inputBuffer, framesPerBuffer, (AudioSample*)inBuff->pointer()->extended_data[0]); - //inBuff.applyGain(parent.isCaptureMuted_ ? 0.0 : parent.captureGain_); + auto nFrames = framesPerBuffer * parent.audioInputFormat_.nb_channels; + if (parent.isCaptureMuted_) + libav_utils::fillWithSilence(inBuff->pointer()); + else + std::copy_n(inputBuffer, nFrames, (AudioSample*)inBuff->pointer()->extended_data[0]); mainRingBuffer_->put(std::move(inBuff)); return paContinue; } -- GitLab