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

Side by Side Diff: media/audio/simple_sources.h

Issue 10832285: Switch OnMoreData() to use AudioBus. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Comments. Created 8 years, 3 months 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 | Annotate | Revision Log
« no previous file with comments | « media/audio/pulse/pulse_output.cc ('k') | media/audio/simple_sources.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef MEDIA_AUDIO_SIMPLE_SOURCES_H_ 5 #ifndef MEDIA_AUDIO_SIMPLE_SOURCES_H_
6 #define MEDIA_AUDIO_SIMPLE_SOURCES_H_ 6 #define MEDIA_AUDIO_SIMPLE_SOURCES_H_
7 7
8 #include <list> 8 #include "base/synchronization/lock.h"
9
10 #include "media/audio/audio_io.h" 9 #include "media/audio/audio_io.h"
11 #include "media/base/seekable_buffer.h" 10 #include "media/base/seekable_buffer.h"
12 11
13 namespace media { 12 namespace media {
14 13
15 // An audio source that produces a pure sinusoidal tone. 14 // An audio source that produces a pure sinusoidal tone.
16 class MEDIA_EXPORT SineWaveAudioSource 15 class MEDIA_EXPORT SineWaveAudioSource
17 : public AudioOutputStream::AudioSourceCallback { 16 : public AudioOutputStream::AudioSourceCallback {
18 public: 17 public:
19 enum Format {
20 FORMAT_8BIT_LINEAR_PCM,
21 FORMAT_16BIT_LINEAR_PCM,
22 };
23 // |channels| is the number of audio channels, |freq| is the frequency in 18 // |channels| is the number of audio channels, |freq| is the frequency in
24 // hertz and it has to be less than half of the sampling frequency 19 // hertz and it has to be less than half of the sampling frequency
25 // |sample_freq| or else you will get aliasing. 20 // |sample_freq| or else you will get aliasing.
26 SineWaveAudioSource(Format format, int channels, 21 SineWaveAudioSource(int channels, double freq, double sample_freq);
27 double freq, double sample_freq);
28 virtual ~SineWaveAudioSource() {} 22 virtual ~SineWaveAudioSource() {}
29 23
24 // Return up to |cap| samples of data via OnMoreData(). Use Reset() to
25 // allow more data to be served.
26 void CapSamples(int cap);
27 void Reset();
28
30 // Implementation of AudioSourceCallback. 29 // Implementation of AudioSourceCallback.
31 virtual uint32 OnMoreData( 30 virtual int OnMoreData(AudioBus* audio_bus,
32 uint8* dest, uint32 max_size, AudioBuffersState audio_buffers) OVERRIDE; 31 AudioBuffersState audio_buffers) OVERRIDE;
33 virtual void OnError(AudioOutputStream* stream, int code) OVERRIDE; 32 virtual void OnError(AudioOutputStream* stream, int code) OVERRIDE;
34 33
35 protected: 34 protected:
36 Format format_;
37 int channels_; 35 int channels_;
38 double freq_; 36 double f_;
39 double sample_freq_;
40 int time_state_; 37 int time_state_;
41 }; 38 int cap_;
42 39 base::Lock time_lock_;
43 // Defines an interface for pushing audio output. In contrast, the interfaces
44 // defined by AudioSourceCallback are pull model only.
45 class MEDIA_EXPORT PushAudioOutput {
46 public:
47 virtual ~PushAudioOutput() {}
48
49 // Write audio data to the audio device. It will be played eventually.
50 // Returns false on failure.
51 virtual bool Write(const void* data, uint32 len) = 0;
52
53 // Returns the number of bytes that have been buffered but not yet given
54 // to the audio device.
55 virtual uint32 UnProcessedBytes() = 0;
56 };
57
58 // A fairly basic class to connect a push model provider PushAudioOutput to
59 // a pull model provider AudioSourceCallback. Fundamentally it manages a series
60 // of audio buffers and is unaware of the actual audio format.
61 // Note that the PushSource is not thread safe and user need to provide locking.
62 class MEDIA_EXPORT PushSource
63 : public AudioOutputStream::AudioSourceCallback,
64 public PushAudioOutput {
65 public:
66 PushSource();
67 virtual ~PushSource();
68
69 // Write one buffer.
70 virtual bool Write(const void* data, uint32 len) OVERRIDE;
71
72 // Return the total number of bytes not given to the audio device yet.
73 virtual uint32 UnProcessedBytes() OVERRIDE;
74
75 // Implementation of AudioSourceCallback.
76 virtual uint32 OnMoreData(uint8* dest,
77 uint32 max_size,
78 AudioBuffersState buffers_state) OVERRIDE;
79 virtual void OnError(AudioOutputStream* stream, int code) OVERRIDE;
80
81 private:
82 // Free acquired resources.
83 void CleanUp();
84
85 media::SeekableBuffer buffer_;
86 }; 40 };
87 41
88 } // namespace media 42 } // namespace media
89 43
90 #endif // MEDIA_AUDIO_SIMPLE_SOURCES_H_ 44 #endif // MEDIA_AUDIO_SIMPLE_SOURCES_H_
OLDNEW
« no previous file with comments | « media/audio/pulse/pulse_output.cc ('k') | media/audio/simple_sources.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698