Bug 1265408 - Add webidl for IIRFilterNode; r=smaug
MozReview-Commit-ID: FdaXR22KwUf
--- a/dom/media/webaudio/AudioContext.cpp
+++ b/dom/media/webaudio/AudioContext.cpp
@@ -25,16 +25,17 @@
#include "AudioStream.h"
#include "BiquadFilterNode.h"
#include "ChannelMergerNode.h"
#include "ChannelSplitterNode.h"
#include "ConvolverNode.h"
#include "DelayNode.h"
#include "DynamicsCompressorNode.h"
#include "GainNode.h"
+#include "IIRFilterNode.h"
#include "MediaElementAudioSourceNode.h"
#include "MediaStreamAudioDestinationNode.h"
#include "MediaStreamAudioSourceNode.h"
#include "MediaStreamGraph.h"
#include "nsContentUtils.h"
#include "nsNetCID.h"
#include "nsNetUtil.h"
#include "nsPIDOMWindow.h"
@@ -504,16 +505,30 @@ AudioContext::CreateBiquadFilter(ErrorRe
return nullptr;
}
RefPtr<BiquadFilterNode> filterNode =
new BiquadFilterNode(this);
return filterNode.forget();
}
+already_AddRefed<IIRFilterNode>
+AudioContext::CreateIIRFilter(const mozilla::dom::binding_detail::AutoSequence<double>& aFeedforward,
+ const mozilla::dom::binding_detail::AutoSequence<double>& aFeedback,
+ mozilla::ErrorResult& aRv)
+{
+ if (CheckClosed(aRv)) {
+ return nullptr;
+ }
+
+ RefPtr<IIRFilterNode> filterNode =
+ new IIRFilterNode(this);
+ return filterNode.forget();
+}
+
already_AddRefed<OscillatorNode>
AudioContext::CreateOscillator(ErrorResult& aRv)
{
if (CheckClosed(aRv)) {
return nullptr;
}
RefPtr<OscillatorNode> oscillatorNode =
--- a/dom/media/webaudio/AudioContext.h
+++ b/dom/media/webaudio/AudioContext.h
@@ -52,19 +52,20 @@ class AudioListener;
class AudioNode;
class BiquadFilterNode;
class ChannelMergerNode;
class ChannelSplitterNode;
class ConvolverNode;
class DelayNode;
class DynamicsCompressorNode;
class GainNode;
+class GlobalObject;
class HTMLMediaElement;
+class IIRFilterNode;
class MediaElementAudioSourceNode;
-class GlobalObject;
class MediaStreamAudioDestinationNode;
class MediaStreamAudioSourceNode;
class OscillatorNode;
class PannerNode;
class ScriptProcessorNode;
class StereoPannerNode;
class WaveShaperNode;
class PeriodicWave;
@@ -246,16 +247,21 @@ public:
CreateChannelMerger(uint32_t aNumberOfInputs, ErrorResult& aRv);
already_AddRefed<DynamicsCompressorNode>
CreateDynamicsCompressor(ErrorResult& aRv);
already_AddRefed<BiquadFilterNode>
CreateBiquadFilter(ErrorResult& aRv);
+ already_AddRefed<IIRFilterNode>
+ CreateIIRFilter(const mozilla::dom::binding_detail::AutoSequence<double>& aFeedforward,
+ const mozilla::dom::binding_detail::AutoSequence<double>& aFeedback,
+ mozilla::ErrorResult& aRv);
+
already_AddRefed<OscillatorNode>
CreateOscillator(ErrorResult& aRv);
already_AddRefed<PeriodicWave>
CreatePeriodicWave(const Float32Array& aRealData, const Float32Array& aImagData,
const PeriodicWaveConstraints& aConstraints,
ErrorResult& aRv);
--- a/dom/media/webaudio/moz.build
+++ b/dom/media/webaudio/moz.build
@@ -51,16 +51,17 @@ EXPORTS.mozilla.dom += [
'AudioProcessingEvent.h',
'BiquadFilterNode.h',
'ChannelMergerNode.h',
'ChannelSplitterNode.h',
'ConvolverNode.h',
'DelayNode.h',
'DynamicsCompressorNode.h',
'GainNode.h',
+ 'IIRFilterNode.h',
'MediaElementAudioSourceNode.h',
'MediaStreamAudioDestinationNode.h',
'MediaStreamAudioSourceNode.h',
'OfflineAudioCompletionEvent.h',
'OscillatorNode.h',
'PannerNode.h',
'PeriodicWave.h',
'ScriptProcessorNode.h',
@@ -87,16 +88,17 @@ UNIFIED_SOURCES += [
'ChannelMergerNode.cpp',
'ChannelSplitterNode.cpp',
'ConvolverNode.cpp',
'DelayBuffer.cpp',
'DelayNode.cpp',
'DynamicsCompressorNode.cpp',
'FFTBlock.cpp',
'GainNode.cpp',
+ 'IIRFilterNode.cpp',
'MediaBufferDecoder.cpp',
'MediaElementAudioSourceNode.cpp',
'MediaStreamAudioDestinationNode.cpp',
'MediaStreamAudioSourceNode.cpp',
'OfflineAudioCompletionEvent.cpp',
'OscillatorNode.cpp',
'PannerNode.cpp',
'PeriodicWave.cpp',
--- a/dom/webidl/AudioContext.webidl
+++ b/dom/webidl/AudioContext.webidl
@@ -70,16 +70,18 @@ interface AudioContext : EventTarget {
MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream);
[NewObject, Throws]
GainNode createGain();
[NewObject, Throws]
DelayNode createDelay(optional double maxDelayTime = 1);
[NewObject, Throws]
BiquadFilterNode createBiquadFilter();
[NewObject, Throws]
+ IIRFilterNode createIIRFilter(sequence<double> feedforward, sequence<double> feedback);
+ [NewObject, Throws]
WaveShaperNode createWaveShaper();
[NewObject, Throws]
PannerNode createPanner();
[NewObject, Throws]
ConvolverNode createConvolver();
[NewObject, Throws]
ChannelSplitterNode createChannelSplitter(optional unsigned long numberOfOutputs = 6);
new file mode 100644
--- /dev/null
+++ b/dom/webidl/IIRFilterNode.webidl
@@ -0,0 +1,17 @@
+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * The origin of this IDL file is https://www.w3.org/TR/webaudio
+ *
+ * Copyright © 2016 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C
+ * liability, trademark and document use rules apply.
+ */
+
+interface IIRFilterNode : AudioNode {
+ void getFrequencyResponse(Float32Array frequencyHz, Float32Array magResponse, Float32Array phaseResponse);
+};
+
+// Mozilla extension
+IIRFilterNode implements AudioNodePassThrough;
--- a/dom/webidl/moz.build
+++ b/dom/webidl/moz.build
@@ -260,16 +260,17 @@ WEBIDL_FILES = [
'IDBIndex.webidl',
'IDBKeyRange.webidl',
'IDBMutableFile.webidl',
'IDBObjectStore.webidl',
'IDBOpenDBRequest.webidl',
'IDBRequest.webidl',
'IDBTransaction.webidl',
'IDBVersionChangeEvent.webidl',
+ 'IIRFilterNode.webidl',
'ImageBitmap.webidl',
'ImageBitmapRenderingContext.webidl',
'ImageCapture.webidl',
'ImageData.webidl',
'ImageDocument.webidl',
'InputEvent.webidl',
'InputMethod.webidl',
'InputPort.webidl',