Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(52)

Side by Side Diff: Source/platform/audio/AudioDestination.h

Issue 100993004: Move chrome specific code from platform/audio/chromium to platform/audio (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: fixed atreat review commets Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/platform/audio/AudioBus.cpp ('k') | Source/platform/audio/AudioDestination.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 11 matching lines...) Expand all
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */ 27 */
28 28
29 #ifndef AudioDestination_h 29 #ifndef AudioDestination_h
30 #define AudioDestination_h 30 #define AudioDestination_h
31 31
32 #include "platform/PlatformExport.h" 32 #include "platform/audio/AudioBus.h"
33 #include "wtf/OwnPtr.h" 33 #include "platform/audio/AudioIOCallback.h"
34 #include "wtf/PassOwnPtr.h" 34 #include "platform/audio/AudioSourceProvider.h"
35 #include "public/platform/WebAudioDevice.h"
36 #include "public/platform/WebVector.h"
37 #include "wtf/Noncopyable.h"
35 #include "wtf/text/WTFString.h" 38 #include "wtf/text/WTFString.h"
36 39
37 namespace WebCore { 40 namespace WebCore {
38 41
39 class AudioIOCallback; 42 class AudioFIFO;
43 class AudioPullFIFO;
40 44
41 // AudioDestination is an abstraction for audio hardware I/O. 45 // An AudioDestination using Chromium's audio system
42 // The audio hardware periodically calls the AudioIOCallback render() method ask ing it to render/output the next render quantum of audio.
43 // It optionally will pass in local/live audio input when it calls render().
44 46
45 class PLATFORM_EXPORT AudioDestination { 47 class PLATFORM_EXPORT AudioDestination : public blink::WebAudioDevice::RenderCal lback, public AudioSourceProvider {
48 WTF_MAKE_NONCOPYABLE(AudioDestination);
46 public: 49 public:
50 AudioDestination(AudioIOCallback&, const String& inputDeviceId, unsigned num berOfInputChannels, unsigned numberOfOutputChannels, float sampleRate);
51 virtual ~AudioDestination();
52
47 // Pass in (numberOfInputChannels > 0) if live/local audio input is desired. 53 // Pass in (numberOfInputChannels > 0) if live/local audio input is desired.
48 // Port-specific device identification information for live/local input stre ams can be passed in the inputDeviceId. 54 // Port-specific device identification information for live/local input stre ams can be passed in the inputDeviceId.
49 static PassOwnPtr<AudioDestination> create(AudioIOCallback&, const String& i nputDeviceId, unsigned numberOfInputChannels, unsigned numberOfOutputChannels, f loat sampleRate); 55 static PassOwnPtr<AudioDestination> create(AudioIOCallback&, const String& i nputDeviceId, unsigned numberOfInputChannels, unsigned numberOfOutputChannels, f loat sampleRate);
50 56
51 virtual ~AudioDestination() { } 57 virtual void start();
58 virtual void stop();
59 bool isPlaying() { return m_isPlaying; }
52 60
53 virtual void start() = 0; 61 float sampleRate() const { return m_sampleRate; }
54 virtual void stop() = 0;
55 virtual bool isPlaying() = 0;
56 62
57 // Sample-rate conversion may happen in AudioDestination to the hardware sam ple-rate 63 // blink::WebAudioDevice::RenderCallback
58 virtual float sampleRate() const = 0; 64 virtual void render(const blink::WebVector<float*>& sourceData, const blink: :WebVector<float*>& audioData, size_t numberOfFrames);
65
66 // WebCore::AudioSourceProvider
67 virtual void provideInput(AudioBus*, size_t framesToProcess);
68
59 static float hardwareSampleRate(); 69 static float hardwareSampleRate();
60 70
61 // maxChannelCount() returns the total number of output channels of the audi o hardware. 71 // maxChannelCount() returns the total number of output channels of the audi o hardware.
62 // A value of 0 indicates that the number of channels cannot be configured a nd 72 // A value of 0 indicates that the number of channels cannot be configured a nd
63 // that only stereo (2-channel) destinations can be created. 73 // that only stereo (2-channel) destinations can be created.
64 // The numberOfOutputChannels parameter of AudioDestination::create() is all owed to 74 // The numberOfOutputChannels parameter of AudioDestination::create() is all owed to
65 // be a value: 1 <= numberOfOutputChannels <= maxChannelCount(), 75 // be a value: 1 <= numberOfOutputChannels <= maxChannelCount(),
66 // or if maxChannelCount() equals 0, then numberOfOutputChannels must be 2. 76 // or if maxChannelCount() equals 0, then numberOfOutputChannels must be 2.
67 static unsigned long maxChannelCount(); 77 static unsigned long maxChannelCount();
78
79 private:
80 AudioIOCallback& m_callback;
81 unsigned m_numberOfOutputChannels;
82 RefPtr<AudioBus> m_inputBus;
83 RefPtr<AudioBus> m_renderBus;
84 float m_sampleRate;
85 bool m_isPlaying;
86 OwnPtr<blink::WebAudioDevice> m_audioDevice;
87 size_t m_callbackBufferSize;
88
89 OwnPtr<AudioFIFO> m_inputFifo;
90 OwnPtr<AudioPullFIFO> m_fifo;
68 }; 91 };
69 92
70 } // namespace WebCore 93 } // namespace WebCore
71 94
72 #endif // AudioDestination_h 95 #endif // AudioDestination_h
OLDNEW
« no previous file with comments | « Source/platform/audio/AudioBus.cpp ('k') | Source/platform/audio/AudioDestination.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698