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

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

Issue 232453003: Add logic to cache elements of panner node from calculation with own attributes and AudioListener (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 8 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: Source/modules/webaudio/PannerNode.h
diff --git a/Source/modules/webaudio/PannerNode.h b/Source/modules/webaudio/PannerNode.h
index f1981df10f0ebeff06acececf5e3765b3bc8cd40..27765cb6270cb6333746fa2ef270cd4c1f76b421 100644
--- a/Source/modules/webaudio/PannerNode.h
+++ b/Source/modules/webaudio/PannerNode.h
@@ -49,16 +49,22 @@ class PannerNode FINAL : public AudioNode {
public:
// These must be defined as in the .idl file and must match those in the Panner class.
enum {
- EQUALPOWER = 0,
+ EqualPower = 0,
Raymond Toy 2014/04/16 17:36:15 Why is the case changed for this enum and the enum
KhNo 2014/04/17 13:41:03 When I added dirty enums, webkit style checker of
HRTF = 1,
};
// These must be defined as in the .idl file and must match those
// in the DistanceEffect class.
enum {
- LINEAR_DISTANCE = 0,
- INVERSE_DISTANCE = 1,
- EXPONENTIAL_DISTANCE = 2,
+ LinearDistance = 0,
+ InverseDistance = 1,
+ ExponentialDistance = 2,
+ };
+
+ enum {
Raymond Toy 2014/04/16 17:36:15 Add comment on what these flags are for.
KhNo 2014/04/17 13:41:03 Done.
+ AzimuthElevationDirty = 0x00000001,
+ DistanceConeGainDirty = 0x00000002,
+ DopplerRateDirty = 0x00000004,
};
static PassRefPtr<PannerNode> create(AudioContext* context, float sampleRate)
@@ -74,20 +80,13 @@ public:
virtual void initialize() OVERRIDE;
virtual void uninitialize() OVERRIDE;
- // AudioContext's listener
- AudioListener* listener();
-
// Panning model
String panningModel() const;
void setPanningModel(const String&);
- // Position
+ // Position, orientation and velocity
void setPosition(float x, float y, float z);
-
- // Orientation
void setOrientation(float x, float y, float z);
-
- // Velocity
void setVelocity(float x, float y, float z);
// Distance parameters
@@ -95,23 +94,25 @@ public:
void setDistanceModel(const String&);
double refDistance() { return m_distanceEffect.refDistance(); }
- void setRefDistance(double refDistance) { m_distanceEffect.setRefDistance(refDistance); }
+ void setRefDistance(double);
double maxDistance() { return m_distanceEffect.maxDistance(); }
- void setMaxDistance(double maxDistance) { m_distanceEffect.setMaxDistance(maxDistance); }
+ void setMaxDistance(double);
double rolloffFactor() { return m_distanceEffect.rolloffFactor(); }
- void setRolloffFactor(double rolloffFactor) { m_distanceEffect.setRolloffFactor(rolloffFactor); }
+ void setRolloffFactor(double);
// Sound cones - angles in degrees
double coneInnerAngle() const { return m_coneEffect.innerAngle(); }
- void setConeInnerAngle(double angle) { m_coneEffect.setInnerAngle(angle); }
+ void setConeInnerAngle(double);
double coneOuterAngle() const { return m_coneEffect.outerAngle(); }
- void setConeOuterAngle(double angle) { m_coneEffect.setOuterAngle(angle); }
+ void setConeOuterAngle(double);
double coneOuterGain() const { return m_coneEffect.outerGain(); }
- void setConeOuterGain(double angle) { m_coneEffect.setOuterGain(angle); }
+ void setConeOuterGain(double);
+
+ void updatePannerDirty(unsigned);
// It must be called on audio thread, currently called only process() in AudioBufferSourceNode.
double dopplerRate();
@@ -122,27 +123,27 @@ public:
private:
PannerNode(AudioContext*, float sampleRate);
+ // AudioContext's listener
+ AudioListener* listener();
+
bool setPanningModel(unsigned); // Returns true on success.
bool setDistanceModel(unsigned); // Returns true on success.
+
void calculateAzimuthElevation(double* outAzimuth, double* outElevation);
- // Returns the combined distance and cone gain attenuation.
- float calculateDistanceConeGain();
+ float calculateDistanceConeGain(); // Returns the combined distance and cone gain attenuation.
double calculateDopplerRate();
void azimuthElevation(double* outAzimuth, double* outElevation);
float distanceConeGain();
- bool isAzimuthElevationDirty();
- bool isDistanceConeGainDirty();
- bool isDopplerRateDirty();
+ bool isAzimuthElevationDirty() const { return m_isAzimuthElevationDirty; }
+ bool isDistanceConeGainDirty() const { return m_isDistanceConeGainDirty; }
+ bool isDopplerRateDirty() const { return m_isDopplerRateDirty; }
// Notifies any AudioBufferSourceNodes connected to us either directly or indirectly about our existence.
// This is in order to handle the pitch change necessary for the doppler shift.
void notifyAudioSourcesConnectedToNode(AudioNode*, HashMap<AudioNode*, bool> &visitedNodes);
- void updateCachedListener();
- void updateCachedSourceLocationInfo();
-
OwnPtr<Panner> m_panner;
unsigned m_panningModel;
unsigned m_distanceModel;
@@ -152,10 +153,9 @@ private:
FloatPoint3D m_orientation;
FloatPoint3D m_velocity;
- // Cached source location information
- FloatPoint3D m_cachedPosition;
- FloatPoint3D m_cachedOrientation;
- FloatPoint3D m_cachedVelocity;
+ bool m_isAzimuthElevationDirty;
+ bool m_isDistanceConeGainDirty;
+ bool m_isDopplerRateDirty;
// Gain
DistanceEffect m_distanceEffect;
@@ -167,15 +167,12 @@ private:
float m_cachedDistanceConeGain;
double m_cachedDopplerRate;
- // Cached listener parameters after processing.
- RefPtr<AudioListener> m_cachedListener;
-
RefPtr<HRTFDatabaseLoader> m_hrtfDatabaseLoader;
// AudioContext's connection count
unsigned m_connectionCount;
- // Synchronize process() with setting of the panning model, distance model and caching of the source location/orientation info.
+ // Synchronize process() with setting of the panning model, source's location information, listener, distance parameters and sound cones.
mutable Mutex m_processLock;
};

Powered by Google App Engine
This is Rietveld 408576698