14576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang/* 24576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * Copyright (C) 2010, Google Inc. All rights reserved. 34576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * 44576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * Redistribution and use in source and binary forms, with or without 54576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * modification, are permitted provided that the following conditions 64576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * are met: 74576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * 1. Redistributions of source code must retain the above copyright 84576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * notice, this list of conditions and the following disclaimer. 94576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * 2. Redistributions in binary form must reproduce the above copyright 104576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * notice, this list of conditions and the following disclaimer in the 114576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * documentation and/or other materials provided with the distribution. 124576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * 134576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 144576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 154576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 164576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 174576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 184576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 194576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 204576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 214576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 224576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 234576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang */ 244576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 254576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#ifndef WebAudioBus_h 264576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#define WebAudioBus_h 274576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 284576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#include "WebCommon.h" 294576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 304576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangnamespace WebCore { class AudioBus; } 31f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 32f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if WEBKIT_IMPLEMENTATION 334576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangnamespace WTF { template <typename T> class PassOwnPtr; } 344576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#endif 354576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 364576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangnamespace WebKit { 374576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 384576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass WebAudioBusPrivate; 394576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 404576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang// A container for multi-channel linear PCM audio data. 414576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang// 424576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang// WARNING: It is not safe to pass a WebAudioBus across threads!!! 434576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang// 444576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangclass WebAudioBus { 454576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangpublic: 464576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang WebAudioBus() : m_private(0) { } 47f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch ~WebAudioBus() { reset(); } 484576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 494576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang // initialize() allocates memory of the given length for the given number of channels. 50f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WEBKIT_API void initialize(unsigned numberOfChannels, size_t length, double sampleRate); 514576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 52f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // reset() releases the memory allocated from initialize(). 53f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WEBKIT_API void reset(); 54f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 554576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang WEBKIT_API unsigned numberOfChannels() const; 564576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang WEBKIT_API size_t length() const; 574576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang WEBKIT_API double sampleRate() const; 584576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 594576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang WEBKIT_API float* channelData(unsigned channelIndex); 604576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 614576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#if WEBKIT_IMPLEMENTATION 624576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang WTF::PassOwnPtr<WebCore::AudioBus> release(); 634576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#endif 644576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 654576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangprivate: 66f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Disallow copy and assign. 67f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WebAudioBus(const WebAudioBus&); 68f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void operator=(const WebAudioBus&); 69f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 70f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WebCore::AudioBus* m_private; 714576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang}; 724576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 734576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang} // namespace WebKit 744576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 754576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang#endif // WebAudioBus_h 76