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

Unified Diff: third_party/WebKit/Source/modules/webaudio/PannerNode.h

Issue 1820403002: Implement Automations for PannerNode and AutioListener (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update test because CL for min/maxValue AudioParam landed Created 4 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
Index: third_party/WebKit/Source/modules/webaudio/PannerNode.h
diff --git a/third_party/WebKit/Source/modules/webaudio/PannerNode.h b/third_party/WebKit/Source/modules/webaudio/PannerNode.h
index a12095ebb48de6c9a4025fd4f7f208b8211d8fe4..56d632d253103e910d26ef7e68f315a70609b483 100644
--- a/third_party/WebKit/Source/modules/webaudio/PannerNode.h
+++ b/third_party/WebKit/Source/modules/webaudio/PannerNode.h
@@ -27,6 +27,7 @@
#include "modules/webaudio/AudioListener.h"
#include "modules/webaudio/AudioNode.h"
+#include "modules/webaudio/AudioParam.h"
#include "platform/audio/AudioBus.h"
#include "platform/audio/Cone.h"
#include "platform/audio/Distance.h"
@@ -53,11 +54,21 @@ public:
DistanceConeGainDirty = 0x2,
};
- static PassRefPtr<PannerHandler> create(AudioNode&, float sampleRate);
+ static PassRefPtr<PannerHandler> create(
+ AudioNode&,
+ float sampleRate,
+ AudioParamHandler& positionX,
+ AudioParamHandler& positionY,
+ AudioParamHandler& positionZ,
+ AudioParamHandler& orientationX,
+ AudioParamHandler& orientationY,
+ AudioParamHandler& orientationZ);
+
~PannerHandler() override;
// AudioHandler
void process(size_t framesToProcess) override;
+ void processSampleAccurateValues(AudioBus* destination, const AudioBus* source, size_t framesToProcess);
void initialize() override;
void uninitialize() override;
@@ -93,6 +104,7 @@ public:
void setConeOuterGain(double);
void markPannerAsDirty(unsigned);
+ void updateDirtyState();
double tailTime() const override { return m_panner ? m_panner->tailTime() : 0; }
double latencyTime() const override { return m_panner ? m_panner->latencyTime() : 0; }
@@ -101,15 +113,35 @@ public:
void setChannelCountMode(const String&, ExceptionState&) final;
private:
- PannerHandler(AudioNode&, float sampleRate);
+ PannerHandler(
+ AudioNode&,
+ float sampleRate,
+ AudioParamHandler& positionX,
+ AudioParamHandler& positionY,
+ AudioParamHandler& positionZ,
+ AudioParamHandler& orientationX,
+ AudioParamHandler& orientationY,
+ AudioParamHandler& orientationZ);
+
// AbstractAudioContext's listener
AudioListener* listener();
bool setPanningModel(unsigned); // Returns true on success.
bool setDistanceModel(unsigned); // Returns true on success.
- void calculateAzimuthElevation(double* outAzimuth, double* outElevation);
- float calculateDistanceConeGain(); // Returns the combined distance and cone gain attenuation.
+ void calculateAzimuthElevation(
+ double* outAzimuth,
+ double* outElevation,
+ const FloatPoint3D& position,
+ const FloatPoint3D& listenerPosition,
+ const FloatPoint3D& listenerForward,
+ const FloatPoint3D& listenerUp);
+
+ // Returns the combined distance and cone gain attenuation.
+ float calculateDistanceConeGain(
+ const FloatPoint3D& position,
+ const FloatPoint3D& orientation,
+ const FloatPoint3D& listenerPosition);
void azimuthElevation(double* outAzimuth, double* outElevation);
float distanceConeGain();
@@ -124,10 +156,6 @@ private:
unsigned m_panningModel;
unsigned m_distanceModel;
- // Current source location information
- FloatPoint3D m_position;
- FloatPoint3D m_orientation;
-
bool m_isAzimuthElevationDirty;
bool m_isDistanceConeGainDirty;
@@ -141,6 +169,36 @@ private:
double m_cachedElevation;
float m_cachedDistanceConeGain;
+ const FloatPoint3D position() const
+ {
+ return FloatPoint3D(
+ m_positionX->value(),
+ m_positionY->value(),
+ m_positionZ->value());
+ }
+
+ const FloatPoint3D orientation() const
+ {
+ return FloatPoint3D(
+ m_orientationX->value(),
+ m_orientationY->value(),
+ m_orientationZ->value());
+ }
+
+ // True if any of this panner's AudioParams have automations.
+ bool hasSampleAccurateValues() const;
+
+ RefPtr<AudioParamHandler> m_positionX;
+ RefPtr<AudioParamHandler> m_positionY;
+ RefPtr<AudioParamHandler> m_positionZ;
+
+ RefPtr<AudioParamHandler> m_orientationX;
+ RefPtr<AudioParamHandler> m_orientationY;
+ RefPtr<AudioParamHandler> m_orientationZ;
+
+ FloatPoint3D m_lastPosition;
+ FloatPoint3D m_lastOrientation;
+
// Synchronize process() with setting of the panning model, source's location information, listener, distance parameters and sound cones.
mutable Mutex m_processLock;
};
@@ -151,6 +209,17 @@ public:
static PannerNode* create(AbstractAudioContext&, float sampleRate);
PannerHandler& pannerHandler() const;
+ DECLARE_VIRTUAL_TRACE();
+
+ // Uses a 3D cartesian coordinate system
+ AudioParam* positionX() const { return m_positionX; };
+ AudioParam* positionY() const { return m_positionY; };
+ AudioParam* positionZ() const { return m_positionZ; };
+
+ AudioParam* orientationX() const { return m_orientationX; };
+ AudioParam* orientationY() const { return m_orientationY; };
+ AudioParam* orientationZ() const { return m_orientationZ; };
+
String panningModel() const;
void setPanningModel(const String&);
void setPosition(float x, float y, float z);
@@ -173,6 +242,14 @@ public:
private:
PannerNode(AbstractAudioContext&, float sampleRate);
+
+ Member<AudioParam> m_positionX;
+ Member<AudioParam> m_positionY;
+ Member<AudioParam> m_positionZ;
+
+ Member<AudioParam> m_orientationX;
+ Member<AudioParam> m_orientationY;
+ Member<AudioParam> m_orientationZ;
};
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698