Diff
Modified: trunk/Source/WebCore/ChangeLog (267540 => 267541)
--- trunk/Source/WebCore/ChangeLog 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/ChangeLog 2020-09-24 18:32:53 UTC (rev 267541)
@@ -1,3 +1,99 @@
+2020-09-24 Chris Dumez <[email protected]>
+
+ Declare render quantum size constant in AudioUtilities.h
+ https://bugs.webkit.org/show_bug.cgi?id=216935
+
+ Reviewed by Eric Carlson.
+
+ Declare render quantum size [1] constant in AudioUtilities.h so that it can be used in both
+ platform/ and Modules/webaudio/. Also update the code so that we have a single constant
+ instead of many.
+
+ [1] https://www.w3.org/TR/webaudio/#render-quantum-size
+
+ * Modules/webaudio/AudioListener.cpp:
+ (WebCore::AudioListener::AudioListener):
+ * Modules/webaudio/AudioNode.h:
+ * Modules/webaudio/AudioNodeInput.cpp:
+ (WebCore::AudioNodeInput::AudioNodeInput):
+ (WebCore::AudioNodeInput::updateInternalBus):
+ * Modules/webaudio/AudioNodeOutput.cpp:
+ (WebCore::AudioNodeOutput::AudioNodeOutput):
+ (WebCore::AudioNodeOutput::updateInternalBus):
+ * Modules/webaudio/AudioParam.cpp:
+ (WebCore::AudioParam::calculateFinalValues):
+ (WebCore::AudioParam::calculateTimelineValues):
+ * Modules/webaudio/AudioParamTimeline.cpp:
+ (WebCore::AudioParamTimeline::valueForContextTime):
+ * Modules/webaudio/AudioScheduledSourceNode.cpp:
+ (WebCore::AudioScheduledSourceNode::updateSchedulingInfo):
+ * Modules/webaudio/BiquadDSPKernel.cpp:
+ (WebCore::BiquadDSPKernel::updateCoefficientsIfNecessary):
+ * Modules/webaudio/BiquadProcessor.cpp:
+ (WebCore::BiquadProcessor::processOnlyAudioParams):
+ * Modules/webaudio/ConstantSourceNode.cpp:
+ (WebCore::ConstantSourceNode::ConstantSourceNode):
+ * Modules/webaudio/ConstantSourceNode.h:
+ * Modules/webaudio/ConvolverNode.cpp:
+ (WebCore::ConvolverNode::setBuffer):
+ * Modules/webaudio/DelayDSPKernel.cpp:
+ (WebCore::DelayDSPKernel::DelayDSPKernel):
+ (WebCore::DelayDSPKernel::processOnlyAudioParams):
+ * Modules/webaudio/DynamicsCompressorNode.cpp:
+ (WebCore::DynamicsCompressorNode::processOnlyAudioParams):
+ * Modules/webaudio/GainNode.cpp:
+ (WebCore::GainNode::GainNode):
+ (WebCore::GainNode::processOnlyAudioParams):
+ * Modules/webaudio/OfflineAudioContext.cpp:
+ (WebCore::OfflineAudioContext::suspendOfflineRendering):
+ * Modules/webaudio/OfflineAudioDestinationNode.cpp:
+ (WebCore::OfflineAudioDestinationNode::OfflineAudioDestinationNode):
+ (WebCore::OfflineAudioDestinationNode::offlineRender):
+ * Modules/webaudio/OfflineAudioDestinationNode.h:
+ * Modules/webaudio/OscillatorNode.cpp:
+ (WebCore::OscillatorNode::OscillatorNode):
+ * Modules/webaudio/OscillatorNode.h:
+ * Modules/webaudio/PannerNode.cpp:
+ (WebCore::PannerNode::processOnlyAudioParams):
+ (WebCore::PannerNode::processSampleAccurateValues):
+ * Modules/webaudio/RealtimeAnalyser.cpp:
+ (WebCore::RealtimeAnalyser::RealtimeAnalyser):
+ * Modules/webaudio/ScriptProcessorNode.cpp:
+ (WebCore::ScriptProcessorNode::ScriptProcessorNode):
+ * Modules/webaudio/StereoPannerNode.cpp:
+ (WebCore::StereoPannerNode::StereoPannerNode):
+ (WebCore::StereoPannerNode::processOnlyAudioParams):
+ * Modules/webaudio/StereoPannerNode.h:
+ * Modules/webaudio/WaveShaperDSPKernel.cpp:
+ (WebCore::WaveShaperDSPKernel::lazyInitializeOversampling):
+ (WebCore::WaveShaperDSPKernel::processCurve2x):
+ (WebCore::WaveShaperDSPKernel::processCurve4x):
+ * platform/audio/AudioResamplerKernel.cpp:
+ (WebCore::AudioResamplerKernel::AudioResamplerKernel):
+ (WebCore::AudioResamplerKernel::getSourcePointer):
+ (WebCore::AudioResamplerKernel::process):
+ * platform/audio/AudioResamplerKernel.h:
+ * platform/audio/AudioUtilities.h:
+ * platform/audio/Biquad.cpp:
+ (WebCore::Biquad::Biquad):
+ * platform/audio/Biquad.h:
+ * platform/audio/HRTFPanner.cpp:
+ (WebCore::HRTFPanner::HRTFPanner):
+ (WebCore::HRTFPanner::pan):
+ * platform/audio/IIRFilter.cpp:
+ (WebCore::IIRFilter::tailTime):
+ * platform/audio/cocoa/AudioDestinationCocoa.cpp:
+ (WebCore::AudioDestinationCocoa::AudioDestinationCocoa):
+ (WebCore::AudioDestinationCocoa::render):
+ (WebCore::AudioDestinationCocoa::provideInput):
+ * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
+ (WebCore::MediaSessionManagerCocoa::updateSessionState):
+ * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
+ (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
+ (WebCore::AudioDestinationGStreamer::framesPerBuffer const):
+ * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
+ (webkit_web_audio_src_class_init):
+
2020-09-24 Youenn Fablet <[email protected]>
Add libwebrtc.dylib version check
Modified: trunk/Source/WebCore/Modules/webaudio/AudioListener.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/AudioListener.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/AudioListener.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -35,6 +35,7 @@
#include "AudioBus.h"
#include "AudioParam.h"
+#include "AudioUtilities.h"
namespace WebCore {
@@ -48,15 +49,15 @@
, m_upX(AudioParam::create(context, "upX", 0.0, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
, m_upY(AudioParam::create(context, "upY", 1.0, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
, m_upZ(AudioParam::create(context, "upZ", 0.0, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
- , m_positionXValues(AudioNode::ProcessingSizeInFrames)
- , m_positionYValues(AudioNode::ProcessingSizeInFrames)
- , m_positionZValues(AudioNode::ProcessingSizeInFrames)
- , m_forwardXValues(AudioNode::ProcessingSizeInFrames)
- , m_forwardYValues(AudioNode::ProcessingSizeInFrames)
- , m_forwardZValues(AudioNode::ProcessingSizeInFrames)
- , m_upXValues(AudioNode::ProcessingSizeInFrames)
- , m_upYValues(AudioNode::ProcessingSizeInFrames)
- , m_upZValues(AudioNode::ProcessingSizeInFrames)
+ , m_positionXValues(AudioUtilities::renderQuantumSize)
+ , m_positionYValues(AudioUtilities::renderQuantumSize)
+ , m_positionZValues(AudioUtilities::renderQuantumSize)
+ , m_forwardXValues(AudioUtilities::renderQuantumSize)
+ , m_forwardYValues(AudioUtilities::renderQuantumSize)
+ , m_forwardZValues(AudioUtilities::renderQuantumSize)
+ , m_upXValues(AudioUtilities::renderQuantumSize)
+ , m_upYValues(AudioUtilities::renderQuantumSize)
+ , m_upZValues(AudioUtilities::renderQuantumSize)
{
}
Modified: trunk/Source/WebCore/Modules/webaudio/AudioNode.h (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/AudioNode.h 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/AudioNode.h 2020-09-24 18:32:53 UTC (rev 267541)
@@ -59,8 +59,6 @@
WTF_MAKE_NONCOPYABLE(AudioNode);
WTF_MAKE_ISO_ALLOCATED(AudioNode);
public:
- enum { ProcessingSizeInFrames = 128 };
-
explicit AudioNode(BaseAudioContext&);
virtual ~AudioNode();
Modified: trunk/Source/WebCore/Modules/webaudio/AudioNodeInput.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/AudioNodeInput.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/AudioNodeInput.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -41,7 +41,7 @@
, m_node(node)
{
// Set to mono by default.
- m_internalSummingBus = AudioBus::create(1, AudioNode::ProcessingSizeInFrames);
+ m_internalSummingBus = AudioBus::create(1, AudioUtilities::renderQuantumSize);
}
void AudioNodeInput::connect(AudioNodeOutput* output)
@@ -141,7 +141,7 @@
if (numberOfInputChannels == m_internalSummingBus->numberOfChannels())
return;
- m_internalSummingBus = AudioBus::create(numberOfInputChannels, AudioNode::ProcessingSizeInFrames);
+ m_internalSummingBus = AudioBus::create(numberOfInputChannels, AudioUtilities::renderQuantumSize);
}
unsigned AudioNodeInput::numberOfChannels() const
Modified: trunk/Source/WebCore/Modules/webaudio/AudioNodeOutput.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/AudioNodeOutput.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/AudioNodeOutput.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -47,7 +47,7 @@
{
ASSERT(numberOfChannels <= AudioContext::maxNumberOfChannels());
- m_internalBus = AudioBus::create(numberOfChannels, AudioNode::ProcessingSizeInFrames);
+ m_internalBus = AudioBus::create(numberOfChannels, AudioUtilities::renderQuantumSize);
}
void AudioNodeOutput::setNumberOfChannels(unsigned numberOfChannels)
@@ -71,7 +71,7 @@
if (numberOfChannels() == m_internalBus->numberOfChannels())
return;
- m_internalBus = AudioBus::create(numberOfChannels(), AudioNode::ProcessingSizeInFrames);
+ m_internalBus = AudioBus::create(numberOfChannels(), AudioUtilities::renderQuantumSize);
}
void AudioNodeOutput::updateRenderingState()
Modified: trunk/Source/WebCore/Modules/webaudio/AudioParam.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/AudioParam.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/AudioParam.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -279,7 +279,7 @@
ASSERT(output);
// Render audio from this output.
- AudioBus* connectionBus = output->pull(0, AudioNode::ProcessingSizeInFrames);
+ AudioBus* connectionBus = output->pull(0, AudioUtilities::renderQuantumSize);
// Sum, with unity-gain.
summingBus->sumFrom(*connectionBus);
@@ -300,7 +300,7 @@
void AudioParam::calculateTimelineValues(float* values, unsigned numberOfValues)
{
// Calculate values for this render quantum.
- // Normally numberOfValues will equal AudioNode::ProcessingSizeInFrames (the render quantum size).
+ // Normally numberOfValues will equal AudioUtilities::renderQuantumSize (the render quantum size).
double sampleRate = context().sampleRate();
size_t startFrame = context().currentSampleFrame();
size_t endFrame = startFrame + numberOfValues;
Modified: trunk/Source/WebCore/Modules/webaudio/AudioParamTimeline.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/AudioParamTimeline.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/AudioParamTimeline.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -329,7 +329,7 @@
double sampleRate = context.sampleRate();
size_t startFrame = context.currentSampleFrame();
size_t endFrame = startFrame + 1;
- double controlRate = sampleRate / AudioNode::ProcessingSizeInFrames; // one parameter change per render quantum
+ double controlRate = sampleRate / AudioUtilities::renderQuantumSize; // one parameter change per render quantum
value = valuesForTimeRange(startFrame, endFrame, defaultValue, minValue, maxValue, &value, 1, sampleRate, controlRate);
return value;
}
Modified: trunk/Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -64,8 +64,8 @@
quantumFrameOffset = 0;
startFrameOffset = 0;
- ASSERT(quantumFrameSize == AudioNode::ProcessingSizeInFrames);
- if (quantumFrameSize != AudioNode::ProcessingSizeInFrames)
+ ASSERT(quantumFrameSize == AudioUtilities::renderQuantumSize);
+ if (quantumFrameSize != AudioUtilities::renderQuantumSize)
return;
double sampleRate = this->sampleRate();
Modified: trunk/Source/WebCore/Modules/webaudio/BiquadDSPKernel.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/BiquadDSPKernel.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/BiquadDSPKernel.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -28,6 +28,7 @@
#include "BiquadDSPKernel.h"
+#include "AudioUtilities.h"
#include "Biquad.h"
#include "BiquadProcessor.h"
#include "FloatConversion.h"
@@ -58,12 +59,12 @@
{
if (biquadProcessor()->filterCoefficientsDirty()) {
if (biquadProcessor()->hasSampleAccurateValues() && biquadProcessor()->shouldUseARate()) {
- float cutoffFrequency[Biquad::MaxFramesToProcess];
- float q[Biquad::MaxFramesToProcess];
- float gain[Biquad::MaxFramesToProcess];
- float detune[Biquad::MaxFramesToProcess]; // in Cents
+ float cutoffFrequency[AudioUtilities::renderQuantumSize];
+ float q[AudioUtilities::renderQuantumSize];
+ float gain[AudioUtilities::renderQuantumSize];
+ float detune[AudioUtilities::renderQuantumSize]; // in Cents
- ASSERT(framesToProcess <= Biquad::MaxFramesToProcess);
+ ASSERT(framesToProcess <= AudioUtilities::renderQuantumSize);
biquadProcessor()->parameter1().calculateSampleAccurateValues(cutoffFrequency, framesToProcess);
biquadProcessor()->parameter2().calculateSampleAccurateValues(q, framesToProcess);
Modified: trunk/Source/WebCore/Modules/webaudio/BiquadProcessor.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/BiquadProcessor.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/BiquadProcessor.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -110,8 +110,8 @@
void BiquadProcessor::processOnlyAudioParams(size_t framesToProcess)
{
- float values[AudioNode::ProcessingSizeInFrames];
- ASSERT(framesToProcess <= AudioNode::ProcessingSizeInFrames);
+ float values[AudioUtilities::renderQuantumSize];
+ ASSERT(framesToProcess <= AudioUtilities::renderQuantumSize);
m_parameter1->calculateSampleAccurateValues(values, framesToProcess);
m_parameter2->calculateSampleAccurateValues(values, framesToProcess);
Modified: trunk/Source/WebCore/Modules/webaudio/ConstantSourceNode.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/ConstantSourceNode.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/ConstantSourceNode.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -31,6 +31,7 @@
#include "AudioNodeOutput.h"
#include "AudioParam.h"
+#include "AudioUtilities.h"
#include "ConstantSourceOptions.h"
#include <wtf/IsoMallocInlines.h>
@@ -55,6 +56,7 @@
ConstantSourceNode::ConstantSourceNode(BaseAudioContext& context, float offset)
: AudioScheduledSourceNode(context)
, m_offset(AudioParam::create(context, "offset"_s, offset, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
+ , m_sampleAccurateValues(AudioUtilities::renderQuantumSize)
{
setNodeType(NodeTypeConstant);
addOutput(makeUnique<AudioNodeOutput>(this, 1));
Modified: trunk/Source/WebCore/Modules/webaudio/ConstantSourceNode.h (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/ConstantSourceNode.h 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/ConstantSourceNode.h 2020-09-24 18:32:53 UTC (rev 267541)
@@ -57,7 +57,7 @@
Ref<AudioParam> m_offset;
// Stores sample-accurate values calculated.
- AudioFloatArray m_sampleAccurateValues { AudioNode::ProcessingSizeInFrames };
+ AudioFloatArray m_sampleAccurateValues;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/Modules/webaudio/ConvolverNode.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/ConvolverNode.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/ConvolverNode.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -32,6 +32,7 @@
#include "AudioBuffer.h"
#include "AudioNodeInput.h"
#include "AudioNodeOutput.h"
+#include "AudioUtilities.h"
#include "Reverb.h"
#include <wtf/IsoMallocInlines.h>
@@ -146,7 +147,7 @@
// Create the reverb with the given impulse response.
bool useBackgroundThreads = !context().isOfflineContext();
- auto reverb = makeUnique<Reverb>(bufferBus.get(), AudioNode::ProcessingSizeInFrames, MaxFFTSize, useBackgroundThreads, m_normalize);
+ auto reverb = makeUnique<Reverb>(bufferBus.get(), AudioUtilities::renderQuantumSize, MaxFFTSize, useBackgroundThreads, m_normalize);
{
// The context must be locked since changing the buffer can re-configure the number of channels that are output.
Modified: trunk/Source/WebCore/Modules/webaudio/DelayDSPKernel.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/DelayDSPKernel.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/DelayDSPKernel.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -35,7 +35,7 @@
DelayDSPKernel::DelayDSPKernel(DelayProcessor* processor)
: AudioDSPKernel(processor)
- , m_delayTimes(AudioNode::ProcessingSizeInFrames)
+ , m_delayTimes(AudioUtilities::renderQuantumSize)
{
ASSERT(processor && processor->sampleRate() > 0);
if (!(processor && processor->sampleRate() > 0))
@@ -138,8 +138,8 @@
if (!delayProcessor())
return;
- float values[AudioNode::ProcessingSizeInFrames];
- ASSERT(framesToProcess <= AudioNode::ProcessingSizeInFrames);
+ float values[AudioUtilities::renderQuantumSize];
+ ASSERT(framesToProcess <= AudioUtilities::renderQuantumSize);
delayProcessor()->delayTime().calculateSampleAccurateValues(values, framesToProcess);
}
Modified: trunk/Source/WebCore/Modules/webaudio/DynamicsCompressorNode.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/DynamicsCompressorNode.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/DynamicsCompressorNode.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -32,6 +32,7 @@
#include "AudioContext.h"
#include "AudioNodeInput.h"
#include "AudioNodeOutput.h"
+#include "AudioUtilities.h"
#include "DynamicsCompressor.h"
#include "WebKitDynamicsCompressorNode.h"
#include <wtf/IsoMallocInlines.h>
@@ -105,8 +106,8 @@
void DynamicsCompressorNode::processOnlyAudioParams(size_t framesToProcess)
{
- float values[AudioNode::ProcessingSizeInFrames];
- ASSERT(framesToProcess <= AudioNode::ProcessingSizeInFrames);
+ float values[AudioUtilities::renderQuantumSize];
+ ASSERT(framesToProcess <= AudioUtilities::renderQuantumSize);
m_threshold->calculateSampleAccurateValues(values, framesToProcess);
m_knee->calculateSampleAccurateValues(values, framesToProcess);
Modified: trunk/Source/WebCore/Modules/webaudio/GainNode.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/GainNode.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/GainNode.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -57,7 +57,7 @@
GainNode::GainNode(BaseAudioContext& context)
: AudioNode(context)
- , m_sampleAccurateGainValues(AudioNode::ProcessingSizeInFrames) // FIXME: can probably share temp buffer in context
+ , m_sampleAccurateGainValues(AudioUtilities::renderQuantumSize) // FIXME: can probably share temp buffer in context
, m_gain(AudioParam::create(context, "gain"_s, 1.0, -FLT_MAX, FLT_MAX, AutomationRate::ARate))
{
setNodeType(NodeTypeGain);
@@ -104,8 +104,8 @@
void GainNode::processOnlyAudioParams(size_t framesToProcess)
{
- float values[AudioNode::ProcessingSizeInFrames];
- ASSERT(framesToProcess <= AudioNode::ProcessingSizeInFrames);
+ float values[AudioUtilities::renderQuantumSize];
+ ASSERT(framesToProcess <= AudioUtilities::renderQuantumSize);
m_gain->calculateSampleAccurateValues(values, framesToProcess);
}
Modified: trunk/Source/WebCore/Modules/webaudio/OfflineAudioContext.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/OfflineAudioContext.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/OfflineAudioContext.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -142,7 +142,7 @@
}
size_t frame = AudioUtilities::timeToSampleFrame(suspendTime, sampleRate());
- frame = OfflineAudioDestinationNode::renderQuantumSize * ((frame + OfflineAudioDestinationNode::renderQuantumSize - 1) / OfflineAudioDestinationNode::renderQuantumSize);
+ frame = AudioUtilities::renderQuantumSize * ((frame + AudioUtilities::renderQuantumSize - 1) / AudioUtilities::renderQuantumSize);
if (frame < currentSampleFrame()) {
promise->reject(Exception { InvalidStateError, "Suspension frame is earlier than current frame"_s });
return;
Modified: trunk/Source/WebCore/Modules/webaudio/OfflineAudioDestinationNode.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/OfflineAudioDestinationNode.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/OfflineAudioDestinationNode.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -30,6 +30,7 @@
#include "AudioBus.h"
#include "AudioContext.h"
+#include "AudioUtilities.h"
#include "HRTFDatabaseLoader.h"
#include <algorithm>
#include <wtf/IsoMallocInlines.h>
@@ -38,8 +39,6 @@
namespace WebCore {
WTF_MAKE_ISO_ALLOCATED_IMPL(OfflineAudioDestinationNode);
-
-const size_t OfflineAudioDestinationNode::renderQuantumSize = 128;
OfflineAudioDestinationNode::OfflineAudioDestinationNode(BaseAudioContext& context, unsigned numberOfChannels, RefPtr<AudioBuffer>&& renderTarget)
: AudioDestinationNode(context)
@@ -47,7 +46,7 @@
, m_renderTarget(WTFMove(renderTarget))
, m_framesToProcess(m_renderTarget ? m_renderTarget->length() : 0)
{
- m_renderBus = AudioBus::create(numberOfChannels, renderQuantumSize);
+ m_renderBus = AudioBus::create(numberOfChannels, AudioUtilities::renderQuantumSize);
initializeDefaultNodeOptions(numberOfChannels, ChannelCountMode::Explicit, ChannelInterpretation::Speakers);
}
@@ -134,7 +133,7 @@
if (!channelsMatch)
return OfflineRenderResult::Failure;
- bool isRenderBusAllocated = m_renderBus->length() >= renderQuantumSize;
+ bool isRenderBusAllocated = m_renderBus->length() >= AudioUtilities::renderQuantumSize;
ASSERT(isRenderBusAllocated);
if (!isRenderBusAllocated)
return OfflineRenderResult::Failure;
@@ -148,9 +147,9 @@
return OfflineRenderResult::Suspended;
// Render one render quantum.
- render(0, m_renderBus.get(), renderQuantumSize, { });
+ render(0, m_renderBus.get(), AudioUtilities::renderQuantumSize, { });
- size_t framesAvailableToCopy = std::min(m_framesToProcess, renderQuantumSize);
+ size_t framesAvailableToCopy = std::min(m_framesToProcess, AudioUtilities::renderQuantumSize);
for (unsigned channelIndex = 0; channelIndex < numberOfChannels; ++channelIndex) {
const float* source = m_renderBus->channel(channelIndex)->data();
Modified: trunk/Source/WebCore/Modules/webaudio/OfflineAudioDestinationNode.h (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/OfflineAudioDestinationNode.h 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/OfflineAudioDestinationNode.h 2020-09-24 18:32:53 UTC (rev 267541)
@@ -54,8 +54,6 @@
float sampleRate() const final { return m_renderTarget->sampleRate(); }
- static const size_t renderQuantumSize;
-
private:
OfflineAudioDestinationNode(BaseAudioContext&, unsigned numberOfChannels, RefPtr<AudioBuffer>&& renderTarget);
Modified: trunk/Source/WebCore/Modules/webaudio/OscillatorNode.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/OscillatorNode.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/OscillatorNode.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -30,6 +30,7 @@
#include "AudioNodeOutput.h"
#include "AudioParam.h"
+#include "AudioUtilities.h"
#include "PeriodicWave.h"
#include "VectorMath.h"
#include <wtf/IsoMallocInlines.h>
@@ -94,6 +95,8 @@
: AudioScheduledSourceNode(context)
, m_frequency(AudioParam::create(context, "frequency"_s, options.frequency, -context.sampleRate() / 2, context.sampleRate() / 2, AutomationRate::ARate))
, m_detune(AudioParam::create(context, "detune"_s, options.detune, -1200 * log2f(std::numeric_limits<float>::max()), 1200 * log2f(std::numeric_limits<float>::max()), AutomationRate::ARate))
+ , m_phaseIncrements(AudioUtilities::renderQuantumSize)
+ , m_detuneValues(AudioUtilities::renderQuantumSize)
{
setNodeType(NodeTypeOscillator);
Modified: trunk/Source/WebCore/Modules/webaudio/OscillatorNode.h (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/OscillatorNode.h 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/OscillatorNode.h 2020-09-24 18:32:53 UTC (rev 267541)
@@ -88,8 +88,8 @@
mutable Lock m_processMutex;
// Stores sample-accurate values calculated according to frequency and detune.
- AudioFloatArray m_phaseIncrements { AudioNode::ProcessingSizeInFrames };
- AudioFloatArray m_detuneValues { AudioNode::ProcessingSizeInFrames };
+ AudioFloatArray m_phaseIncrements;
+ AudioFloatArray m_detuneValues;
RefPtr<PeriodicWave> m_periodicWave;
};
Modified: trunk/Source/WebCore/Modules/webaudio/PannerNode.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/PannerNode.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/PannerNode.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -183,8 +183,8 @@
void PannerNode::processOnlyAudioParams(size_t framesToProcess)
{
- float values[AudioNode::ProcessingSizeInFrames];
- ASSERT(framesToProcess <= AudioNode::ProcessingSizeInFrames);
+ float values[AudioUtilities::renderQuantumSize];
+ ASSERT(framesToProcess <= AudioUtilities::renderQuantumSize);
m_positionX->calculateSampleAccurateValues(values, framesToProcess);
m_positionY->calculateSampleAccurateValues(values, framesToProcess);
@@ -201,13 +201,13 @@
{
// Get the sample accurate values from all of the AudioParams, including the
// values from the AudioListener.
- float pannerX[AudioNode::ProcessingSizeInFrames];
- float pannerY[AudioNode::ProcessingSizeInFrames];
- float pannerZ[AudioNode::ProcessingSizeInFrames];
+ float pannerX[AudioUtilities::renderQuantumSize];
+ float pannerY[AudioUtilities::renderQuantumSize];
+ float pannerZ[AudioUtilities::renderQuantumSize];
- float orientationX[AudioNode::ProcessingSizeInFrames];
- float orientationY[AudioNode::ProcessingSizeInFrames];
- float orientationZ[AudioNode::ProcessingSizeInFrames];
+ float orientationX[AudioUtilities::renderQuantumSize];
+ float orientationY[AudioUtilities::renderQuantumSize];
+ float orientationZ[AudioUtilities::renderQuantumSize];
m_positionX->calculateSampleAccurateValues(pannerX, framesToProcess);
m_positionY->calculateSampleAccurateValues(pannerY, framesToProcess);
@@ -217,22 +217,22 @@
m_orientationZ->calculateSampleAccurateValues(orientationZ, framesToProcess);
// Get the automation values from the listener.
- const float* listenerX = listener().positionXValues(AudioNode::ProcessingSizeInFrames);
- const float* listenerY = listener().positionYValues(AudioNode::ProcessingSizeInFrames);
- const float* listenerZ = listener().positionZValues(AudioNode::ProcessingSizeInFrames);
+ const float* listenerX = listener().positionXValues(AudioUtilities::renderQuantumSize);
+ const float* listenerY = listener().positionYValues(AudioUtilities::renderQuantumSize);
+ const float* listenerZ = listener().positionZValues(AudioUtilities::renderQuantumSize);
- const float* forwardX = listener().forwardXValues(AudioNode::ProcessingSizeInFrames);
- const float* forwardY = listener().forwardYValues(AudioNode::ProcessingSizeInFrames);
- const float* forwardZ = listener().forwardZValues(AudioNode::ProcessingSizeInFrames);
+ const float* forwardX = listener().forwardXValues(AudioUtilities::renderQuantumSize);
+ const float* forwardY = listener().forwardYValues(AudioUtilities::renderQuantumSize);
+ const float* forwardZ = listener().forwardZValues(AudioUtilities::renderQuantumSize);
- const float* upX = listener().upXValues(AudioNode::ProcessingSizeInFrames);
- const float* upY = listener().upYValues(AudioNode::ProcessingSizeInFrames);
- const float* upZ = listener().upZValues(AudioNode::ProcessingSizeInFrames);
+ const float* upX = listener().upXValues(AudioUtilities::renderQuantumSize);
+ const float* upY = listener().upYValues(AudioUtilities::renderQuantumSize);
+ const float* upZ = listener().upZValues(AudioUtilities::renderQuantumSize);
// Compute the azimuth, elevation, and total gains for each position.
- double azimuth[AudioNode::ProcessingSizeInFrames];
- double elevation[AudioNode::ProcessingSizeInFrames];
- float totalGain[AudioNode::ProcessingSizeInFrames];
+ double azimuth[AudioUtilities::renderQuantumSize];
+ double elevation[AudioUtilities::renderQuantumSize];
+ float totalGain[AudioUtilities::renderQuantumSize];
for (size_t k = 0; k < framesToProcess; ++k) {
FloatPoint3D pannerPosition(pannerX[k], pannerY[k], pannerZ[k]);
Modified: trunk/Source/WebCore/Modules/webaudio/RealtimeAnalyser.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/RealtimeAnalyser.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/RealtimeAnalyser.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -55,7 +55,7 @@
RealtimeAnalyser::RealtimeAnalyser()
: m_inputBuffer(InputBufferSize)
, m_writeIndex(0)
- , m_downmixBus(AudioBus::create(1, AudioNode::ProcessingSizeInFrames))
+ , m_downmixBus(AudioBus::create(1, AudioUtilities::renderQuantumSize))
, m_fftSize(DefaultFFTSize)
, m_magnitudeBuffer(DefaultFFTSize / 2)
, m_smoothingTimeConstant(DefaultSmoothingTimeConstant)
Modified: trunk/Source/WebCore/Modules/webaudio/ScriptProcessorNode.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/ScriptProcessorNode.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/ScriptProcessorNode.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -34,6 +34,7 @@
#include "AudioNodeInput.h"
#include "AudioNodeOutput.h"
#include "AudioProcessingEvent.h"
+#include "AudioUtilities.h"
#include "Document.h"
#include "EventNames.h"
#include <_javascript_Core/Float32Array.h>
@@ -58,11 +59,11 @@
, m_bufferReadWriteIndex(0)
, m_numberOfInputChannels(numberOfInputChannels)
, m_numberOfOutputChannels(numberOfOutputChannels)
- , m_internalInputBus(AudioBus::create(numberOfInputChannels, AudioNode::ProcessingSizeInFrames, false))
+ , m_internalInputBus(AudioBus::create(numberOfInputChannels, AudioUtilities::renderQuantumSize, false))
{
// Regardless of the allowed buffer sizes, we still need to process at the granularity of the AudioNode.
- if (m_bufferSize < AudioNode::ProcessingSizeInFrames)
- m_bufferSize = AudioNode::ProcessingSizeInFrames;
+ if (m_bufferSize < AudioUtilities::renderQuantumSize)
+ m_bufferSize = AudioUtilities::renderQuantumSize;
ASSERT(numberOfInputChannels <= AudioContext::maxNumberOfChannels());
Modified: trunk/Source/WebCore/Modules/webaudio/StereoPannerNode.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/StereoPannerNode.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/StereoPannerNode.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -32,6 +32,7 @@
#include "AudioBus.h"
#include "AudioNodeInput.h"
#include "AudioNodeOutput.h"
+#include "AudioUtilities.h"
#include <wtf/IsoMallocInlines.h>
namespace WebCore {
@@ -57,6 +58,7 @@
StereoPannerNode::StereoPannerNode(BaseAudioContext& context, float pan)
: AudioNode(context)
, m_pan(AudioParam::create(context, "pan"_s, pan, -1, 1, AutomationRate::ARate))
+ , m_sampleAccurateValues(AudioUtilities::renderQuantumSize)
{
setNodeType(NodeTypeStereo);
@@ -102,8 +104,8 @@
void StereoPannerNode::processOnlyAudioParams(size_t framesToProcess)
{
- float values[AudioNode::ProcessingSizeInFrames];
- ASSERT(framesToProcess <= AudioNode::ProcessingSizeInFrames);
+ float values[AudioUtilities::renderQuantumSize];
+ ASSERT(framesToProcess <= AudioUtilities::renderQuantumSize);
m_pan->calculateSampleAccurateValues(values, framesToProcess);
}
Modified: trunk/Source/WebCore/Modules/webaudio/StereoPannerNode.h (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/StereoPannerNode.h 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/StereoPannerNode.h 2020-09-24 18:32:53 UTC (rev 267541)
@@ -61,7 +61,7 @@
double latencyTime() const final { return 0; }
Ref<AudioParam> m_pan;
- AudioFloatArray m_sampleAccurateValues { AudioNode::ProcessingSizeInFrames };
+ AudioFloatArray m_sampleAccurateValues;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/Modules/webaudio/WaveShaperDSPKernel.cpp (267540 => 267541)
--- trunk/Source/WebCore/Modules/webaudio/WaveShaperDSPKernel.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/Modules/webaudio/WaveShaperDSPKernel.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -28,13 +28,12 @@
#include "WaveShaperDSPKernel.h"
+#include "AudioUtilities.h"
#include "WaveShaperProcessor.h"
#include <algorithm>
#include <wtf/MainThread.h>
#include <wtf/Threading.h>
-const unsigned RenderingQuantum = 128;
-
namespace WebCore {
WaveShaperDSPKernel::WaveShaperDSPKernel(WaveShaperProcessor* processor)
@@ -49,12 +48,12 @@
ASSERT(isMainThread());
if (!m_tempBuffer) {
- m_tempBuffer = makeUnique<AudioFloatArray>(RenderingQuantum * 2);
- m_tempBuffer2 = makeUnique<AudioFloatArray>(RenderingQuantum * 4);
- m_upSampler = makeUnique<UpSampler>(RenderingQuantum);
- m_downSampler = makeUnique<DownSampler>(RenderingQuantum * 2);
- m_upSampler2 = makeUnique<UpSampler>(RenderingQuantum * 2);
- m_downSampler2 = makeUnique<DownSampler>(RenderingQuantum * 4);
+ m_tempBuffer = makeUnique<AudioFloatArray>(AudioUtilities::renderQuantumSize * 2);
+ m_tempBuffer2 = makeUnique<AudioFloatArray>(AudioUtilities::renderQuantumSize * 4);
+ m_upSampler = makeUnique<UpSampler>(AudioUtilities::renderQuantumSize);
+ m_downSampler = makeUnique<DownSampler>(AudioUtilities::renderQuantumSize * 2);
+ m_upSampler2 = makeUnique<UpSampler>(AudioUtilities::renderQuantumSize * 2);
+ m_downSampler2 = makeUnique<DownSampler>(AudioUtilities::renderQuantumSize * 4);
}
}
@@ -117,7 +116,7 @@
void WaveShaperDSPKernel::processCurve2x(const float* source, float* destination, size_t framesToProcess)
{
- bool isSafe = framesToProcess == RenderingQuantum;
+ bool isSafe = framesToProcess == AudioUtilities::renderQuantumSize;
ASSERT(isSafe);
if (!isSafe)
return;
@@ -134,7 +133,7 @@
void WaveShaperDSPKernel::processCurve4x(const float* source, float* destination, size_t framesToProcess)
{
- bool isSafe = framesToProcess == RenderingQuantum;
+ bool isSafe = framesToProcess == AudioUtilities::renderQuantumSize;
ASSERT(isSafe);
if (!isSafe)
return;
Modified: trunk/Source/WebCore/platform/audio/AudioResamplerKernel.cpp (267540 => 267541)
--- trunk/Source/WebCore/platform/audio/AudioResamplerKernel.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/platform/audio/AudioResamplerKernel.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -29,16 +29,15 @@
#include "AudioResamplerKernel.h"
#include "AudioResampler.h"
+#include "AudioUtilities.h"
#include <algorithm>
namespace WebCore {
-
-const size_t AudioResamplerKernel::MaxFramesToProcess = 128;
AudioResamplerKernel::AudioResamplerKernel(AudioResampler* resampler)
: m_resampler(resampler)
// The buffer size must be large enough to hold up to two extra sample frames for the linear interpolation.
- , m_sourceBuffer(2 + static_cast<int>(MaxFramesToProcess * AudioResampler::MaxRate))
+ , m_sourceBuffer(2 + static_cast<int>(AudioUtilities::renderQuantumSize * AudioResampler::MaxRate))
, m_virtualReadIndex(0.0)
, m_fillIndex(0)
{
@@ -48,7 +47,7 @@
float* AudioResamplerKernel::getSourcePointer(size_t framesToProcess, size_t* numberOfSourceFramesNeededP)
{
- ASSERT(framesToProcess <= MaxFramesToProcess);
+ ASSERT(framesToProcess <= AudioUtilities::renderQuantumSize);
// Calculate the next "virtual" index. After process() is called, m_virtualReadIndex will equal this value.
double nextFractionalIndex = m_virtualReadIndex + framesToProcess * rate();
@@ -73,7 +72,7 @@
void AudioResamplerKernel::process(float* destination, size_t framesToProcess)
{
- ASSERT(framesToProcess <= MaxFramesToProcess);
+ ASSERT(framesToProcess <= AudioUtilities::renderQuantumSize);
float* source = m_sourceBuffer.data();
Modified: trunk/Source/WebCore/platform/audio/AudioResamplerKernel.h (267540 => 267541)
--- trunk/Source/WebCore/platform/audio/AudioResamplerKernel.h 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/platform/audio/AudioResamplerKernel.h 2020-09-24 18:32:53 UTC (rev 267541)
@@ -45,19 +45,17 @@
// getSourcePointer() should be called each time before process() is called.
// Given a number of frames to process (for subsequent call to process()), it returns a pointer and numberOfSourceFramesNeeded
// where sample data should be copied. This sample data provides the input to the resampler when process() is called.
- // framesToProcess must be less than or equal to MaxFramesToProcess.
+ // framesToProcess must be less than or equal to AudioUtilities::renderQuantumSize.
float* getSourcePointer(size_t framesToProcess, size_t* numberOfSourceFramesNeeded);
// process() resamples framesToProcess frames from the source into destination.
// Each call to process() must be preceded by a call to getSourcePointer() so that source input may be supplied.
- // framesToProcess must be less than or equal to MaxFramesToProcess.
+ // framesToProcess must be less than or equal to AudioUtilities::renderQuantumSize.
void process(float* destination, size_t framesToProcess);
// Resets the processing state.
void reset();
- static const size_t MaxFramesToProcess;
-
private:
double rate() const;
Modified: trunk/Source/WebCore/platform/audio/AudioUtilities.h (267540 => 267541)
--- trunk/Source/WebCore/platform/audio/AudioUtilities.h 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/platform/audio/AudioUtilities.h 2020-09-24 18:32:53 UTC (rev 267541)
@@ -29,6 +29,9 @@
namespace AudioUtilities {
+// https://www.w3.org/TR/webaudio/#render-quantum-size
+constexpr size_t renderQuantumSize = 128;
+
// Standard functions for converting to and from decibel values from linear.
float linearToDecibels(float);
float decibelsToLinear(float);
Modified: trunk/Source/WebCore/platform/audio/Biquad.cpp (267540 => 267541)
--- trunk/Source/WebCore/platform/audio/Biquad.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/platform/audio/Biquad.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -32,6 +32,7 @@
#include "Biquad.h"
+#include "AudioUtilities.h"
#include "DenormalDisabler.h"
#include <algorithm>
#include <stdio.h>
@@ -59,11 +60,11 @@
// Allocate enough space for the a-rate filter coefficients to handle a
// rendering quantum of 128 frames.
- m_b0.allocate(MaxFramesToProcess);
- m_b1.allocate(MaxFramesToProcess);
- m_b2.allocate(MaxFramesToProcess);
- m_a1.allocate(MaxFramesToProcess);
- m_a2.allocate(MaxFramesToProcess);
+ m_b0.allocate(AudioUtilities::renderQuantumSize);
+ m_b1.allocate(AudioUtilities::renderQuantumSize);
+ m_b2.allocate(AudioUtilities::renderQuantumSize);
+ m_a1.allocate(AudioUtilities::renderQuantumSize);
+ m_a2.allocate(AudioUtilities::renderQuantumSize);
// Initialize as pass-thru (straight-wire, no filter effect)
setNormalizedCoefficients(0, 1, 0, 0, 1, 0, 0);
Modified: trunk/Source/WebCore/platform/audio/Biquad.h (267540 => 267541)
--- trunk/Source/WebCore/platform/audio/Biquad.h 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/platform/audio/Biquad.h 2020-09-24 18:32:53 UTC (rev 267541)
@@ -46,8 +46,6 @@
Biquad();
~Biquad();
- static constexpr size_t MaxFramesToProcess = 128;
-
void process(const float* sourceP, float* destP, size_t framesToProcess);
bool hasSampleAccurateValues() const { return m_hasSampleAccurateValues; }
Modified: trunk/Source/WebCore/platform/audio/HRTFPanner.cpp (267540 => 267541)
--- trunk/Source/WebCore/platform/audio/HRTFPanner.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/platform/audio/HRTFPanner.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -29,6 +29,7 @@
#include "HRTFPanner.h"
#include "AudioBus.h"
+#include "AudioUtilities.h"
#include "FFTConvolver.h"
#include "HRTFDatabase.h"
#include "HRTFDatabaseLoader.h"
@@ -42,7 +43,6 @@
const double MaxDelayTimeSeconds = 0.002;
const int UninitializedAzimuth = -1;
-const unsigned RenderingQuantum = 128;
HRTFPanner::HRTFPanner(float sampleRate, HRTFDatabaseLoader* databaseLoader)
: Panner(PanningModelType::HRTF)
@@ -61,10 +61,10 @@
, m_convolverR2(fftSizeForSampleRate(sampleRate))
, m_delayLineL(MaxDelayTimeSeconds, sampleRate)
, m_delayLineR(MaxDelayTimeSeconds, sampleRate)
- , m_tempL1(RenderingQuantum)
- , m_tempR1(RenderingQuantum)
- , m_tempL2(RenderingQuantum)
- , m_tempR2(RenderingQuantum)
+ , m_tempL1(AudioUtilities::renderQuantumSize)
+ , m_tempR1(AudioUtilities::renderQuantumSize)
+ , m_tempL2(AudioUtilities::renderQuantumSize)
+ , m_tempR2(AudioUtilities::renderQuantumSize)
{
ASSERT(databaseLoader);
}
@@ -218,11 +218,11 @@
}
}
- // This algorithm currently requires that we process in power-of-two size chunks at least RenderingQuantum.
+ // This algorithm currently requires that we process in power-of-two size chunks at least AudioUtilities::renderQuantumSize.
ASSERT(1UL << static_cast<int>(log2(framesToProcess)) == framesToProcess);
- ASSERT(framesToProcess >= RenderingQuantum);
+ ASSERT(framesToProcess >= AudioUtilities::renderQuantumSize);
- const unsigned framesPerSegment = RenderingQuantum;
+ const unsigned framesPerSegment = AudioUtilities::renderQuantumSize;
const unsigned numberOfSegments = framesToProcess / framesPerSegment;
for (unsigned segment = 0; segment < numberOfSegments; ++segment) {
Modified: trunk/Source/WebCore/platform/audio/IIRFilter.cpp (267540 => 267541)
--- trunk/Source/WebCore/platform/audio/IIRFilter.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/platform/audio/IIRFilter.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -29,6 +29,7 @@
#include "IIRFilter.h"
#include "AudioArray.h"
+#include "AudioUtilities.h"
#include "VectorMath.h"
#include <algorithm>
#include <complex>
@@ -36,8 +37,6 @@
namespace WebCore {
-constexpr unsigned iirRenderingQuantum = 128;
-
// The length of the memory buffers for the IIR filter. This MUST be a power of
// two and must be greater than the possible length of the filter coefficients.
constexpr int bufferLength = 32;
@@ -188,11 +187,11 @@
// zero out the output of the node.
// Number of render quanta needed to reach the max tail time.
- int numberOfBlocks = std::ceil(sampleRate * maxTailTime / iirRenderingQuantum);
+ int numberOfBlocks = std::ceil(sampleRate * maxTailTime / AudioUtilities::renderQuantumSize);
// Input and output buffers for filtering.
- AudioFloatArray input(iirRenderingQuantum);
- AudioFloatArray output(iirRenderingQuantum);
+ AudioFloatArray input(AudioUtilities::renderQuantumSize);
+ AudioFloatArray output(AudioUtilities::renderQuantumSize);
// Array to hold the max magnitudes
AudioFloatArray magnitudes(numberOfBlocks);
@@ -201,8 +200,8 @@
input[0] = 1;
// Process the first block and get the max magnitude of the output.
- process(input.data(), output.data(), iirRenderingQuantum);
- VectorMath::vmaxmgv(output.data(), 1, &magnitudes[0], iirRenderingQuantum);
+ process(input.data(), output.data(), AudioUtilities::renderQuantumSize);
+ VectorMath::vmaxmgv(output.data(), 1, &magnitudes[0], AudioUtilities::renderQuantumSize);
// Process the rest of the signal, getting the max magnitude of the
// output for each block.
@@ -209,8 +208,8 @@
input[0] = 0;
for (int k = 1; k < numberOfBlocks; ++k) {
- process(input.data(), output.data(), iirRenderingQuantum);
- VectorMath::vmaxmgv(output.data(), 1, &magnitudes[k], iirRenderingQuantum);
+ process(input.data(), output.data(), AudioUtilities::renderQuantumSize);
+ VectorMath::vmaxmgv(output.data(), 1, &magnitudes[k], AudioUtilities::renderQuantumSize);
}
// Done computing the impulse response; reset the state so the actual node
@@ -228,7 +227,7 @@
// The magnitude first become lower than the threshold at the next block.
// Compute the corresponding time value value; that's the tail time.
- return (index + 1) * iirRenderingQuantum / sampleRate;
+ return (index + 1) * AudioUtilities::renderQuantumSize / sampleRate;
}
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.cpp (267540 => 267541)
--- trunk/Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -30,6 +30,7 @@
#include "AudioBus.h"
#include "AudioSession.h"
+#include "AudioUtilities.h"
#include "Logging.h"
#include "MultiChannelResampler.h"
#include "PushPullFIFO.h"
@@ -36,10 +37,8 @@
namespace WebCore {
-constexpr size_t kRenderBufferSize = 128;
+constexpr size_t fifoSize = 96 * AudioUtilities::renderQuantumSize;
-constexpr size_t fifoSize = 96 * kRenderBufferSize;
-
CreateAudioDestinationCocoaOverride AudioDestinationCocoa::createOverride = nullptr;
std::unique_ptr<AudioDestination> AudioDestination::create(AudioIOCallback& callback, const String&, unsigned numberOfInputChannels, unsigned numberOfOutputChannels, float sampleRate)
@@ -74,8 +73,8 @@
AudioDestinationCocoa::AudioDestinationCocoa(AudioIOCallback& callback, unsigned numberOfOutputChannels, float sampleRate)
: m_outputUnit(0)
, m_callback(callback)
- , m_outputBus(AudioBus::create(numberOfOutputChannels, kRenderBufferSize, false).releaseNonNull())
- , m_renderBus(AudioBus::create(numberOfOutputChannels, kRenderBufferSize).releaseNonNull())
+ , m_outputBus(AudioBus::create(numberOfOutputChannels, AudioUtilities::renderQuantumSize, false).releaseNonNull())
+ , m_renderBus(AudioBus::create(numberOfOutputChannels, AudioUtilities::renderQuantumSize).releaseNonNull())
, m_fifo(makeUniqueRef<PushPullFIFO>(numberOfOutputChannels, fifoSize))
, m_contextSampleRate(sampleRate)
{
@@ -84,7 +83,7 @@
auto hardwareSampleRate = this->hardwareSampleRate();
if (sampleRate != hardwareSampleRate) {
double scaleFactor = static_cast<double>(sampleRate) / hardwareSampleRate;
- m_resampler = makeUnique<MultiChannelResampler>(scaleFactor, numberOfOutputChannels, kRenderBufferSize);
+ m_resampler = makeUnique<MultiChannelResampler>(scaleFactor, numberOfOutputChannels, AudioUtilities::renderQuantumSize);
}
}
@@ -176,11 +175,11 @@
assignAudioBuffersToBus(buffers, m_outputBus.get(), numberOfBuffers, numberOfFrames, 0, numberOfFrames);
size_t framesToRender = m_fifo->pull(m_outputBus.ptr(), numberOfFrames);
- for (size_t pushedFrames = 0; pushedFrames < framesToRender; pushedFrames += kRenderBufferSize) {
+ for (size_t pushedFrames = 0; pushedFrames < framesToRender; pushedFrames += AudioUtilities::renderQuantumSize) {
if (m_resampler)
- m_resampler->process(this, m_renderBus.ptr(), kRenderBufferSize);
+ m_resampler->process(this, m_renderBus.ptr(), AudioUtilities::renderQuantumSize);
else
- m_callback.render(0, m_renderBus.ptr(), kRenderBufferSize, m_outputTimestamp);
+ m_callback.render(0, m_renderBus.ptr(), AudioUtilities::renderQuantumSize, m_outputTimestamp);
m_fifo->push(m_renderBus.ptr());
}
@@ -197,8 +196,8 @@
void AudioDestinationCocoa::provideInput(AudioBus* bus, size_t framesToProcess)
{
- ASSERT_UNUSED(framesToProcess, framesToProcess == kRenderBufferSize);
- m_callback.render(0, bus, kRenderBufferSize, m_outputTimestamp);
+ ASSERT_UNUSED(framesToProcess, framesToProcess == AudioUtilities::renderQuantumSize);
+ m_callback.render(0, bus, AudioUtilities::renderQuantumSize, m_outputTimestamp);
}
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm (267540 => 267541)
--- trunk/Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.mm 2020-09-24 18:32:53 UTC (rev 267541)
@@ -29,6 +29,7 @@
#if USE(AUDIO_SESSION) && PLATFORM(COCOA)
#import "AudioSession.h"
+#import "AudioUtilities.h"
#import "DeprecatedGlobalSettings.h"
#import "HTMLMediaElement.h"
#import "Logging.h"
@@ -42,7 +43,6 @@
#import "MediaRemoteSoftLink.h"
-static const size_t kWebAudioBufferSize = 128;
static const size_t kLowPowerVideoBufferSize = 4096;
namespace WebCore {
@@ -102,7 +102,7 @@
"WebAudio(", webAudioCount, ")");
if (webAudioCount)
- AudioSession::sharedSession().setPreferredBufferSize(kWebAudioBufferSize);
+ AudioSession::sharedSession().setPreferredBufferSize(AudioUtilities::renderQuantumSize);
// In case of audio capture, we want to grab 20 ms chunks to limit the latency so that it is not noticeable by users
// while having a large enough buffer so that the audio rendering remains stable, hence a computation based on sample rate.
else if (captureCount)
@@ -112,7 +112,7 @@
if (m_audioHardwareListener && m_audioHardwareListener->outputDeviceSupportsLowPowerMode())
bufferSize = kLowPowerVideoBufferSize;
else
- bufferSize = kWebAudioBufferSize;
+ bufferSize = AudioUtilities::renderQuantumSize;
AudioSession::sharedSession().setPreferredBufferSize(bufferSize);
}
Modified: trunk/Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp (267540 => 267541)
--- trunk/Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -25,6 +25,7 @@
#include "AudioChannel.h"
#include "AudioSourceProvider.h"
+#include "AudioUtilities.h"
#include "GRefPtrGStreamer.h"
#include "Logging.h"
#include "WebKitWebAudioSourceGStreamer.h"
@@ -35,10 +36,6 @@
namespace WebCore {
-// Size of the AudioBus for playback. The webkitwebaudiosrc element
-// needs to handle this number of frames per cycle as well.
-const unsigned framesToPull = 128;
-
gboolean messageCallback(GstBus*, GstMessage* message, AudioDestinationGStreamer* destination)
{
return destination->handleMessage(message);
@@ -79,7 +76,7 @@
AudioDestinationGStreamer::AudioDestinationGStreamer(AudioIOCallback& callback, float sampleRate)
: m_callback(callback)
- , m_renderBus(AudioBus::create(2, framesToPull, false))
+ , m_renderBus(AudioBus::create(2, AudioUtilities::renderQuantumSize, false))
, m_sampleRate(sampleRate)
, m_isPlaying(false)
{
@@ -93,7 +90,7 @@
"rate", sampleRate,
"bus", m_renderBus.get(),
"provider", &m_callback,
- "frames", framesToPull, nullptr));
+ "frames", AudioUtilities::renderQuantumSize, nullptr));
GRefPtr<GstElement> audioSink = gst_element_factory_make("autoaudiosink", nullptr);
m_audioSinkAvailable = audioSink;
@@ -138,7 +135,7 @@
unsigned AudioDestinationGStreamer::framesPerBuffer() const
{
- return framesToPull;
+ return AudioUtilities::renderQuantumSize;
}
gboolean AudioDestinationGStreamer::handleMessage(GstMessage* message)
Modified: trunk/Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp (267540 => 267541)
--- trunk/Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp 2020-09-24 18:29:21 UTC (rev 267540)
+++ trunk/Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp 2020-09-24 18:32:53 UTC (rev 267541)
@@ -25,6 +25,7 @@
#include "AudioBus.h"
#include "AudioIOCallback.h"
+#include "AudioUtilities.h"
#include "GStreamerCommon.h"
#include <gst/app/gstappsrc.h>
#include <gst/audio/audio-info.h>
@@ -186,7 +187,7 @@
PROP_FRAMES,
g_param_spec_uint("frames", "frames",
"Number of audio frames to pull at each iteration",
- 0, G_MAXUINT8, 128, flags));
+ 0, G_MAXUINT8, AudioUtilities::renderQuantumSize, flags));
}
static void webKitWebAudioSrcConstructed(GObject* object)