| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010, Google Inc. All rights reserved. | 2 * Copyright (C) 2010, Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 , m_automaticPullNodesNeedUpdating(false) | 121 , m_automaticPullNodesNeedUpdating(false) |
| 122 , m_connectionCount(0) | 122 , m_connectionCount(0) |
| 123 , m_audioThread(0) | 123 , m_audioThread(0) |
| 124 , m_graphOwnerThread(UndefinedThreadIdentifier) | 124 , m_graphOwnerThread(UndefinedThreadIdentifier) |
| 125 , m_isOfflineContext(false) | 125 , m_isOfflineContext(false) |
| 126 , m_activeSourceCount(0) | 126 , m_activeSourceCount(0) |
| 127 { | 127 { |
| 128 constructCommon(); | 128 constructCommon(); |
| 129 | 129 |
| 130 m_destinationNode = DefaultAudioDestinationNode::create(this); | 130 m_destinationNode = DefaultAudioDestinationNode::create(this); |
| 131 | |
| 132 // This sets in motion an asynchronous loading mechanism on another thread. | |
| 133 // We can check m_hrtfDatabaseLoader->isLoaded() to find out whether or not
it has been fully loaded. | |
| 134 // It's not that useful to have a callback function for this since the audio
thread automatically starts rendering on the graph | |
| 135 // when this has finished (see AudioDestinationNode). | |
| 136 m_hrtfDatabaseLoader = HRTFDatabaseLoader::createAndLoadAsynchronouslyIfNece
ssary(sampleRate()); | |
| 137 } | 131 } |
| 138 | 132 |
| 139 // Constructor for offline (non-realtime) rendering. | 133 // Constructor for offline (non-realtime) rendering. |
| 140 AudioContext::AudioContext(Document* document, unsigned numberOfChannels, size_t
numberOfFrames, float sampleRate) | 134 AudioContext::AudioContext(Document* document, unsigned numberOfChannels, size_t
numberOfFrames, float sampleRate) |
| 141 : ActiveDOMObject(document) | 135 : ActiveDOMObject(document) |
| 142 , m_isStopScheduled(false) | 136 , m_isStopScheduled(false) |
| 143 , m_isInitialized(false) | 137 , m_isInitialized(false) |
| 144 , m_isAudioThreadFinished(false) | 138 , m_isAudioThreadFinished(false) |
| 145 , m_destinationNode(nullptr) | 139 , m_destinationNode(nullptr) |
| 146 , m_automaticPullNodesNeedUpdating(false) | 140 , m_automaticPullNodesNeedUpdating(false) |
| 147 , m_connectionCount(0) | 141 , m_connectionCount(0) |
| 148 , m_audioThread(0) | 142 , m_audioThread(0) |
| 149 , m_graphOwnerThread(UndefinedThreadIdentifier) | 143 , m_graphOwnerThread(UndefinedThreadIdentifier) |
| 150 , m_isOfflineContext(true) | 144 , m_isOfflineContext(true) |
| 151 , m_activeSourceCount(0) | 145 , m_activeSourceCount(0) |
| 152 { | 146 { |
| 153 constructCommon(); | 147 constructCommon(); |
| 154 | 148 |
| 155 m_hrtfDatabaseLoader = HRTFDatabaseLoader::createAndLoadAsynchronouslyIfNece
ssary(sampleRate); | |
| 156 | |
| 157 // Create a new destination for offline rendering. | 149 // Create a new destination for offline rendering. |
| 158 m_renderTarget = AudioBuffer::create(numberOfChannels, numberOfFrames, sampl
eRate); | 150 m_renderTarget = AudioBuffer::create(numberOfChannels, numberOfFrames, sampl
eRate); |
| 159 ASSERT(m_renderTarget); | 151 ASSERT(m_renderTarget); |
| 160 m_destinationNode = OfflineAudioDestinationNode::create(this, m_renderTarget
.get()); | 152 m_destinationNode = OfflineAudioDestinationNode::create(this, m_renderTarget
.get()); |
| 161 ASSERT(m_destinationNode); | 153 ASSERT(m_destinationNode); |
| 162 } | 154 } |
| 163 | 155 |
| 164 void AudioContext::constructCommon() | 156 void AudioContext::constructCommon() |
| 165 { | 157 { |
| 166 ScriptWrappable::init(this); | 158 ScriptWrappable::init(this); |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 derefUnfinishedSourceNodes(); | 245 derefUnfinishedSourceNodes(); |
| 254 | 246 |
| 255 m_isInitialized = false; | 247 m_isInitialized = false; |
| 256 } | 248 } |
| 257 | 249 |
| 258 bool AudioContext::isInitialized() const | 250 bool AudioContext::isInitialized() const |
| 259 { | 251 { |
| 260 return m_isInitialized; | 252 return m_isInitialized; |
| 261 } | 253 } |
| 262 | 254 |
| 263 bool AudioContext::isRunnable() const | |
| 264 { | |
| 265 if (!isInitialized()) | |
| 266 return false; | |
| 267 | |
| 268 // Check with the HRTF spatialization system to see if it's finished loading
. | |
| 269 return m_hrtfDatabaseLoader->isLoaded(); | |
| 270 } | |
| 271 | |
| 272 void AudioContext::stopDispatch(void* userData) | 255 void AudioContext::stopDispatch(void* userData) |
| 273 { | 256 { |
| 274 AudioContext* context = reinterpret_cast<AudioContext*>(userData); | 257 AudioContext* context = reinterpret_cast<AudioContext*>(userData); |
| 275 ASSERT(context); | 258 ASSERT(context); |
| 276 if (!context) | 259 if (!context) |
| 277 return; | 260 return; |
| 278 | 261 |
| 279 context->uninitialize(); | 262 context->uninitialize(); |
| 280 context->clear(); | 263 context->clear(); |
| 281 } | 264 } |
| (...skipping 775 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1057 } | 1040 } |
| 1058 | 1041 |
| 1059 void AudioContext::decrementActiveSourceCount() | 1042 void AudioContext::decrementActiveSourceCount() |
| 1060 { | 1043 { |
| 1061 atomicDecrement(&m_activeSourceCount); | 1044 atomicDecrement(&m_activeSourceCount); |
| 1062 } | 1045 } |
| 1063 | 1046 |
| 1064 } // namespace WebCore | 1047 } // namespace WebCore |
| 1065 | 1048 |
| 1066 #endif // ENABLE(WEB_AUDIO) | 1049 #endif // ENABLE(WEB_AUDIO) |
| OLD | NEW |