Index: Source/modules/webaudio/OfflineAudioDestinationNode.h |
diff --git a/Source/modules/webaudio/OfflineAudioDestinationNode.h b/Source/modules/webaudio/OfflineAudioDestinationNode.h |
index 736810419fec638606130531b0f0b04ff8aef2c2..d6a09534c138239275838150e044987b6b20f748 100644 |
--- a/Source/modules/webaudio/OfflineAudioDestinationNode.h |
+++ b/Source/modules/webaudio/OfflineAudioDestinationNode.h |
@@ -27,6 +27,7 @@ |
#include "modules/webaudio/AudioBuffer.h" |
#include "modules/webaudio/AudioDestinationNode.h" |
+#include "modules/webaudio/OfflineAudioContext.h" |
#include "public/platform/WebThread.h" |
#include "wtf/PassRefPtr.h" |
#include "wtf/RefPtr.h" |
@@ -35,6 +36,7 @@ namespace blink { |
class AbstractAudioContext; |
class AudioBus; |
+class OfflineAudioContext; |
class OfflineAudioDestinationHandler final : public AudioDestinationHandler { |
public: |
@@ -46,16 +48,32 @@ public: |
void initialize() override; |
void uninitialize() override; |
- // AudioDestinationHandler |
+ OfflineAudioContext* context() const final; |
+ |
+ // Override the one from AudioContext. Create a rendering thread and |
+ // initiate rendering loop or resume rendering if already started and |
+ // suspended. |
void startRendering() override; |
+ |
+ // There is no support of the explicit stopping in OfflineAudioContext. This |
+ // is just to match the class method signature. |
void stopRendering() override; |
- float sampleRate() const override { return m_renderTarget->sampleRate(); } |
+ float sampleRate() const override { return m_renderTarget->sampleRate(); } |
+ |
+ // Return the frame position by quantizing the time (in seconds) and |
+ // rounding it down to the nearest render quantum boundary. |
+ size_t quantizeTimeToRenderQuantum(double when) const; |
+ |
+ WebThread* offlineRenderThread(); |
private: |
OfflineAudioDestinationHandler(AudioNode&, AudioBuffer* renderTarget); |
- void offlineRender(); |
- void offlineRenderInternal(); |
+ |
+ // For start/suspend/resume rendering in the destination node. |
+ void startOfflineRendering(); |
+ void runOfflineRendering(); |
+ void finishOfflineRendering(); |
// For completion callback on main thread. |
void notifyComplete(); |
@@ -69,7 +87,11 @@ private: |
// Rendering thread. |
OwnPtr<WebThread> m_renderThread; |
- bool m_startedRendering; |
+ |
+ size_t m_framesProcessed; |
+ size_t m_framesToProcess; |
+ |
+ bool m_isRenderingStarted; |
}; |
class OfflineAudioDestinationNode final : public AudioDestinationNode { |