Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1134)

Unified Diff: Source/modules/webaudio/WaveShaperDSPKernel.h

Issue 15619003: Add support for WaveShaperNode.oversample (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: change TestExpectations in middle of file Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/platform/audio/UpSampler.cpp ('k') | Source/modules/webaudio/WaveShaperDSPKernel.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/modules/webaudio/WaveShaperDSPKernel.h
diff --git a/Source/modules/webaudio/WaveShaperDSPKernel.h b/Source/modules/webaudio/WaveShaperDSPKernel.h
index f2c3d6306a75c3cc8766818932477eb1f01eee79..90db6791a696f51bdaa60114b1001d75cb2d4e13 100644
--- a/Source/modules/webaudio/WaveShaperDSPKernel.h
+++ b/Source/modules/webaudio/WaveShaperDSPKernel.h
@@ -25,8 +25,12 @@
#ifndef WaveShaperDSPKernel_h
#define WaveShaperDSPKernel_h
+#include "core/platform/audio/AudioArray.h"
#include "core/platform/audio/AudioDSPKernel.h"
+#include "core/platform/audio/DownSampler.h"
+#include "core/platform/audio/UpSampler.h"
#include "modules/webaudio/WaveShaperProcessor.h"
+#include "wtf/OwnPtr.h"
namespace WebCore {
@@ -35,20 +39,35 @@ class WaveShaperProcessor;
// WaveShaperDSPKernel is an AudioDSPKernel and is responsible for non-linear distortion on one channel.
class WaveShaperDSPKernel : public AudioDSPKernel {
-public:
- explicit WaveShaperDSPKernel(WaveShaperProcessor* processor)
- : AudioDSPKernel(processor)
- {
- }
-
+public:
+ explicit WaveShaperDSPKernel(WaveShaperProcessor*);
+
// AudioDSPKernel
virtual void process(const float* source, float* dest, size_t framesToProcess);
- virtual void reset() { }
+ virtual void reset();
virtual double tailTime() const OVERRIDE { return 0; }
- virtual double latencyTime() const OVERRIDE { return 0; }
-
+ virtual double latencyTime() const OVERRIDE;
+
+ // Oversampling requires more resources, so let's only allocate them if needed.
+ void lazyInitializeOversampling();
+
protected:
+ // Apply the shaping curve.
+ void processCurve(const float* source, float* dest, size_t framesToProcess);
+
+ // Use up-sampling, process at the higher sample-rate, then down-sample.
+ void processCurve2x(const float* source, float* dest, size_t framesToProcess);
+ void processCurve4x(const float* source, float* dest, size_t framesToProcess);
+
WaveShaperProcessor* waveShaperProcessor() { return static_cast<WaveShaperProcessor*>(processor()); }
+
+ // Oversampling.
+ OwnPtr<AudioFloatArray> m_tempBuffer;
+ OwnPtr<AudioFloatArray> m_tempBuffer2;
+ OwnPtr<UpSampler> m_upSampler;
+ OwnPtr<DownSampler> m_downSampler;
+ OwnPtr<UpSampler> m_upSampler2;
+ OwnPtr<DownSampler> m_downSampler2;
};
} // namespace WebCore
« no previous file with comments | « Source/core/platform/audio/UpSampler.cpp ('k') | Source/modules/webaudio/WaveShaperDSPKernel.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698