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 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 const size_t fifoSize = 8192; | 44 const size_t fifoSize = 8192; |
45 | 45 |
46 // Factory method: Chromium-implementation | 46 // Factory method: Chromium-implementation |
47 std::unique_ptr<AudioDestination> AudioDestination::create( | 47 std::unique_ptr<AudioDestination> AudioDestination::create( |
48 AudioIOCallback& callback, | 48 AudioIOCallback& callback, |
49 const String& inputDeviceId, | 49 const String& inputDeviceId, |
50 unsigned numberOfInputChannels, | 50 unsigned numberOfInputChannels, |
51 unsigned numberOfOutputChannels, | 51 unsigned numberOfOutputChannels, |
52 float sampleRate, | 52 float sampleRate, |
53 PassRefPtr<SecurityOrigin> securityOrigin) { | 53 PassRefPtr<SecurityOrigin> securityOrigin) { |
54 return wrapUnique(new AudioDestination( | 54 return WTF::wrapUnique(new AudioDestination( |
55 callback, inputDeviceId, numberOfInputChannels, numberOfOutputChannels, | 55 callback, inputDeviceId, numberOfInputChannels, numberOfOutputChannels, |
56 sampleRate, std::move(securityOrigin))); | 56 sampleRate, std::move(securityOrigin))); |
57 } | 57 } |
58 | 58 |
59 AudioDestination::AudioDestination(AudioIOCallback& callback, | 59 AudioDestination::AudioDestination(AudioIOCallback& callback, |
60 const String& inputDeviceId, | 60 const String& inputDeviceId, |
61 unsigned numberOfInputChannels, | 61 unsigned numberOfInputChannels, |
62 unsigned numberOfOutputChannels, | 62 unsigned numberOfOutputChannels, |
63 float sampleRate, | 63 float sampleRate, |
64 PassRefPtr<SecurityOrigin> securityOrigin) | 64 PassRefPtr<SecurityOrigin> securityOrigin) |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 if (m_callbackBufferSize <= kSmallBufferSize) | 101 if (m_callbackBufferSize <= kSmallBufferSize) |
102 m_callbackBufferSize = kDefaultCallbackBufferSize; | 102 m_callbackBufferSize = kDefaultCallbackBufferSize; |
103 #endif | 103 #endif |
104 | 104 |
105 // Quick exit if the requested size is too large. | 105 // Quick exit if the requested size is too large. |
106 DCHECK_LE(m_callbackBufferSize + AudioUtilities::kRenderQuantumFrames, | 106 DCHECK_LE(m_callbackBufferSize + AudioUtilities::kRenderQuantumFrames, |
107 fifoSize); | 107 fifoSize); |
108 if (m_callbackBufferSize + AudioUtilities::kRenderQuantumFrames > fifoSize) | 108 if (m_callbackBufferSize + AudioUtilities::kRenderQuantumFrames > fifoSize) |
109 return; | 109 return; |
110 | 110 |
111 m_audioDevice = wrapUnique(Platform::current()->createAudioDevice( | 111 m_audioDevice = WTF::wrapUnique(Platform::current()->createAudioDevice( |
112 m_callbackBufferSize, numberOfInputChannels, numberOfOutputChannels, | 112 m_callbackBufferSize, numberOfInputChannels, numberOfOutputChannels, |
113 sampleRate, this, inputDeviceId, std::move(securityOrigin))); | 113 sampleRate, this, inputDeviceId, std::move(securityOrigin))); |
114 ASSERT(m_audioDevice); | 114 ASSERT(m_audioDevice); |
115 | 115 |
116 // Record the sizes if we successfully created an output device. | 116 // Record the sizes if we successfully created an output device. |
117 hardwareBufferSizeHistogram.sample(recommendedHardwareBufferSize); | 117 hardwareBufferSizeHistogram.sample(recommendedHardwareBufferSize); |
118 callbackBufferSizeHistogram.sample(m_callbackBufferSize); | 118 callbackBufferSizeHistogram.sample(m_callbackBufferSize); |
119 | 119 |
120 // Create a FIFO to handle the possibility of the callback size | 120 // Create a FIFO to handle the possibility of the callback size |
121 // not being a multiple of the render size. If the FIFO already | 121 // not being a multiple of the render size. If the FIFO already |
122 // contains enough data, the data will be provided directly. | 122 // contains enough data, the data will be provided directly. |
123 // Otherwise, the FIFO will call the provider enough times to | 123 // Otherwise, the FIFO will call the provider enough times to |
124 // satisfy the request for data. | 124 // satisfy the request for data. |
125 m_fifo = wrapUnique(new AudioPullFIFO(*this, numberOfOutputChannels, fifoSize, | 125 m_fifo = |
| 126 WTF::wrapUnique(new AudioPullFIFO(*this, numberOfOutputChannels, fifoSize, |
126 AudioUtilities::kRenderQuantumFrames)); | 127 AudioUtilities::kRenderQuantumFrames)); |
127 | 128 |
128 // Input buffering. | 129 // Input buffering. |
129 m_inputFifo = makeUnique<AudioFIFO>(numberOfInputChannels, fifoSize); | 130 m_inputFifo = WTF::makeUnique<AudioFIFO>(numberOfInputChannels, fifoSize); |
130 | 131 |
131 // If the callback size does not match the render size, then we need to | 132 // If the callback size does not match the render size, then we need to |
132 // buffer some extra silence for the input. Otherwise, we can over-consume | 133 // buffer some extra silence for the input. Otherwise, we can over-consume |
133 // the input FIFO. | 134 // the input FIFO. |
134 if (m_callbackBufferSize != AudioUtilities::kRenderQuantumFrames) { | 135 if (m_callbackBufferSize != AudioUtilities::kRenderQuantumFrames) { |
135 // FIXME: handle multi-channel input and don't hard-code to stereo. | 136 // FIXME: handle multi-channel input and don't hard-code to stereo. |
136 RefPtr<AudioBus> silence = | 137 RefPtr<AudioBus> silence = |
137 AudioBus::create(2, AudioUtilities::kRenderQuantumFrames); | 138 AudioBus::create(2, AudioUtilities::kRenderQuantumFrames); |
138 m_inputFifo->push(silence.get()); | 139 m_inputFifo->push(silence.get()); |
139 } | 140 } |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 AudioBus* sourceBus = nullptr; | 200 AudioBus* sourceBus = nullptr; |
200 if (m_inputFifo->framesInFifo() >= framesToProcess) { | 201 if (m_inputFifo->framesInFifo() >= framesToProcess) { |
201 m_inputFifo->consume(m_inputBus.get(), framesToProcess); | 202 m_inputFifo->consume(m_inputBus.get(), framesToProcess); |
202 sourceBus = m_inputBus.get(); | 203 sourceBus = m_inputBus.get(); |
203 } | 204 } |
204 | 205 |
205 m_callback.render(sourceBus, bus, framesToProcess); | 206 m_callback.render(sourceBus, bus, framesToProcess); |
206 } | 207 } |
207 | 208 |
208 } // namespace blink | 209 } // namespace blink |
OLD | NEW |