| Index: Source/modules/webaudio/PannerNode.h
|
| diff --git a/Source/modules/webaudio/PannerNode.h b/Source/modules/webaudio/PannerNode.h
|
| index f1981df10f0ebeff06acececf5e3765b3bc8cd40..82b8440314cce4505a62b09f308881e1fd3689ac 100644
|
| --- a/Source/modules/webaudio/PannerNode.h
|
| +++ b/Source/modules/webaudio/PannerNode.h
|
| @@ -61,6 +61,13 @@ public:
|
| EXPONENTIAL_DISTANCE = 2,
|
| };
|
|
|
| + // These enums are used to distinguish what cached values of panner are dirty.
|
| + enum {
|
| + AzimuthElevationDirty = 0x1,
|
| + DistanceConeGainDirty = 0x2,
|
| + DopplerRateDirty = 0x4,
|
| + };
|
| +
|
| static PassRefPtr<PannerNode> create(AudioContext* context, float sampleRate)
|
| {
|
| return adoptRef(new PannerNode(context, sampleRate));
|
| @@ -74,20 +81,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 +95,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 markPannerAsDirty(unsigned);
|
|
|
| // It must be called on audio thread, currently called only process() in AudioBufferSourceNode.
|
| double dopplerRate();
|
| @@ -122,27 +124,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,30 +154,27 @@ 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;
|
| ConeEffect m_coneEffect;
|
| float m_lastGain;
|
|
|
| + // Cached values
|
| double m_cachedAzimuth;
|
| double m_cachedElevation;
|
| 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;
|
| };
|
|
|
|
|