Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / platform / exported / WebAudioBus.cpp
1 /*
2  * Copyright (C) 2010, Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1.  Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2.  Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16  * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  */
24
25 #include "config.h"
26 #include "public/platform/WebAudioBus.h"
27
28 #if ENABLE(WEB_AUDIO)
29 #include "platform/audio/AudioBus.h"
30 #else
31 #include "wtf/ThreadSafeRefCounted.h"
32
33 namespace blink {
34 class AudioBus : public ThreadSafeRefCounted<AudioBus> {
35 };
36 } // namespace blink
37 #endif
38
39 #include "wtf/PassRefPtr.h"
40 #include "wtf/RefPtr.h"
41
42 namespace blink {
43
44 class WebAudioBusPrivate : public AudioBus {
45 };
46
47 void WebAudioBus::initialize(unsigned numberOfChannels, size_t length, double sampleRate)
48 {
49 #if ENABLE(WEB_AUDIO)
50     RefPtr<AudioBus> audioBus = AudioBus::create(numberOfChannels, length);
51     audioBus->setSampleRate(sampleRate);
52
53     if (m_private)
54         (static_cast<AudioBus*>(m_private))->deref();
55
56     audioBus->ref();
57     m_private = static_cast<WebAudioBusPrivate*>(audioBus.get());
58 #else
59     ASSERT_NOT_REACHED();
60 #endif
61 }
62
63 void WebAudioBus::resizeSmaller(size_t newLength)
64 {
65 #if ENABLE(WEB_AUDIO)
66     ASSERT(m_private);
67     if (m_private) {
68         ASSERT(newLength <= length());
69         m_private->resizeSmaller(newLength);
70     }
71 #else
72     ASSERT_NOT_REACHED();
73 #endif
74 }
75
76 void WebAudioBus::reset()
77 {
78 #if ENABLE(WEB_AUDIO)
79     if (m_private) {
80         (static_cast<AudioBus*>(m_private))->deref();
81         m_private = 0;
82     }
83 #else
84     ASSERT_NOT_REACHED();
85 #endif
86 }
87
88 unsigned WebAudioBus::numberOfChannels() const
89 {
90 #if ENABLE(WEB_AUDIO)
91     if (!m_private)
92         return 0;
93     return m_private->numberOfChannels();
94 #else
95     ASSERT_NOT_REACHED();
96     return 0;
97 #endif
98 }
99
100 size_t WebAudioBus::length() const
101 {
102 #if ENABLE(WEB_AUDIO)
103     if (!m_private)
104         return 0;
105     return m_private->length();
106 #else
107     ASSERT_NOT_REACHED();
108     return 0;
109 #endif
110 }
111
112 double WebAudioBus::sampleRate() const
113 {
114 #if ENABLE(WEB_AUDIO)
115     if (!m_private)
116         return 0;
117     return m_private->sampleRate();
118 #else
119     ASSERT_NOT_REACHED();
120     return 0;
121 #endif
122 }
123
124 float* WebAudioBus::channelData(unsigned channelIndex)
125 {
126 #if ENABLE(WEB_AUDIO)
127     if (!m_private)
128         return 0;
129     ASSERT(channelIndex < numberOfChannels());
130     return m_private->channel(channelIndex)->mutableData();
131 #else
132     ASSERT_NOT_REACHED();
133     return 0;
134 #endif
135 }
136
137 PassRefPtr<AudioBus> WebAudioBus::release()
138 {
139 #if ENABLE(WEB_AUDIO)
140     RefPtr<AudioBus> audioBus(adoptRef(static_cast<AudioBus*>(m_private)));
141     m_private = 0;
142     return audioBus;
143 #else
144     ASSERT_NOT_REACHED();
145     return nullptr;
146 #endif
147 }
148
149 } // namespace blink