/* * Copyright (C) 2010 Google Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "third_party/blink/renderer/platform/audio/reverb_convolver.h" #include <memory> #include <utility> #include "base/location.h" #include "third_party/blink/renderer/platform/audio/audio_bus.h" #include "third_party/blink/renderer/platform/audio/vector_math.h" #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h" #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h" namespace blink { const int kInputBufferSize = …; // We only process the leading portion of the impulse response in the real-time // thread. We don't exceed this length. It turns out then, that the // background thread has about 278msec of scheduling slop. Empirically, this // has been found to be a good compromise between giving enough time for // scheduling slop, while still minimizing the amount of processing done in the // primary (high-priority) thread. This was found to be a good value on Mac OS // X, and may work well on other platforms as well, assuming the very rough // scheduling latencies are similar on these time-scales. Of course, this code // may need to be tuned for individual platforms if this assumption is found to // be incorrect. const size_t kRealtimeFrameLimit = …; // ~278msec @ 44.1KHz const unsigned kMinFFTSize = …; const unsigned kMaxRealtimeFFTSize = …; ReverbConvolver::ReverbConvolver(AudioChannel* impulse_response, unsigned render_slice_size, unsigned max_fft_size, size_t convolver_render_phase, bool use_background_threads, float scale) : … { … } ReverbConvolver::~ReverbConvolver() { … } void ReverbConvolver::ProcessInBackground() { … } void ReverbConvolver::Process(const AudioChannel* source_channel, AudioChannel* destination_channel, uint32_t frames_to_process) { … } void ReverbConvolver::Reset() { … } size_t ReverbConvolver::LatencyFrames() const { … } } // namespace blink