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