From dca28d002b1f155ad33fda6894a65c9c181cd237 Mon Sep 17 00:00:00 2001 From: Ehsan Akhgari Date: Sun, 10 Mar 2013 13:59:41 -0400 Subject: [PATCH] Bug 849713 - Part 2: Accept the loop parameters on AudioBufferSourceNodeEngine; r=roc --- .../media/webaudio/AudioBufferSourceNode.cpp | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/content/media/webaudio/AudioBufferSourceNode.cpp b/content/media/webaudio/AudioBufferSourceNode.cpp index 838b3f5b4e9..338cfac7ef4 100644 --- a/content/media/webaudio/AudioBufferSourceNode.cpp +++ b/content/media/webaudio/AudioBufferSourceNode.cpp @@ -25,7 +25,16 @@ class AudioBufferSourceNodeEngine : public AudioNodeEngine { public: AudioBufferSourceNodeEngine() : - mStart(0), mStop(TRACK_TICKS_MAX), mOffset(0), mDuration(0) {} + mStart(0), mStop(TRACK_TICKS_MAX), + mOffset(0), mDuration(0), + mLoop(NotLooping), mLoopStart(0), mLoopEnd(0) + {} + + enum LoopState { + NotLooping, // Will never loop + WillLoop, // In loop mode, but has not started to loop yet + IsLooping // Is looping + }; // START, OFFSET and DURATION are always set by start() (along with setting // mBuffer to something non-null). @@ -34,7 +43,10 @@ public: START, STOP, OFFSET, - DURATION + DURATION, + LOOP, + LOOPSTART, + LOOPEND }; virtual void SetStreamTimeParameter(uint32_t aIndex, TrackTicks aParam) { @@ -50,6 +62,9 @@ public: switch (aIndex) { case OFFSET: mOffset = aParam; break; case DURATION: mDuration = aParam; break; + case LOOP: mLoop = aParam ? WillLoop: NotLooping; break; + case LOOPSTART: mLoopStart = aParam; break; + case LOOPEND: mLoopEnd = aParam; break; default: NS_ERROR("Bad AudioBufferSourceNodeEngine Int32Parameter"); } @@ -123,6 +138,9 @@ public: nsRefPtr mBuffer; int32_t mOffset; int32_t mDuration; + LoopState mLoop; + int32_t mLoopStart; + int32_t mLoopEnd; }; AudioBufferSourceNode::AudioBufferSourceNode(AudioContext* aContext)