diff --git a/src/media/audio/portaudio/portaudiolayer.cpp b/src/media/audio/portaudio/portaudiolayer.cpp index 52c350f536dd2af5c4035cdf7fa23e24a94794d7..3703fe1b85996da53a328d8714af595905133e7a 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; }