diff options
author | hclam@google.com <hclam@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-22 00:06:17 +0000 |
---|---|---|
committer | hclam@google.com <hclam@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-22 00:06:17 +0000 |
commit | dff80f15dca03378e052f725a6dbff46f4649249 (patch) | |
tree | 8b87e546774f6ff053bf590fe440e653314adce7 /media/audio/win/audio_output_win.cc | |
parent | ee01535e43949832b8fb57a74d892390e01d36dd (diff) | |
download | chromium_src-dff80f15dca03378e052f725a6dbff46f4649249.zip chromium_src-dff80f15dca03378e052f725a6dbff46f4649249.tar.gz chromium_src-dff80f15dca03378e052f725a6dbff46f4649249.tar.bz2 |
Refactoring to share MockAudioOutputStream implementations across 3 platforms
Re-trying the previous CL. The last change got reverted because of valgrind
failure.
TBR=scherkus
Original CL: http://codereview.chromium.org/155471
Review URL: http://codereview.chromium.org/159167
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21242 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/audio/win/audio_output_win.cc')
-rw-r--r-- | media/audio/win/audio_output_win.cc | 94 |
1 files changed, 2 insertions, 92 deletions
diff --git a/media/audio/win/audio_output_win.cc b/media/audio/win/audio_output_win.cc index bc8c712..f7eac01 100644 --- a/media/audio/win/audio_output_win.cc +++ b/media/audio/win/audio_output_win.cc @@ -9,81 +9,10 @@ #include "base/at_exit.h" #include "base/basictypes.h" +#include "media/audio/fake_audio_output_stream.h" #include "media/audio/win/audio_manager_win.h" #include "media/audio/win/waveout_output_win.h" -// A do-nothing audio stream. It behaves like a regular audio stream but does -// not have any side effect, except possibly the creation and tear-down of -// of a thread. It is useful to test code that uses audio streams such as -// audio sources. -class AudioOutputStreamMockWin : public AudioOutputStream { - public: - explicit AudioOutputStreamMockWin(AudioManagerWin* manager) - : manager_(manager), - callback_(NULL), - buffer_(NULL), - packet_size_(0), - left_volume_(1.0), - right_volume_(1.0) { - } - - virtual ~AudioOutputStreamMockWin() { - delete[] buffer_; - packet_size_ = 0; - } - - virtual bool Open(size_t packet_size) { - if (packet_size < sizeof(int16)) - return false; - packet_size_ = packet_size; - buffer_ = new char[packet_size_]; - return true; - } - - virtual void Start(AudioSourceCallback* callback) { - callback_ = callback; - memset(buffer_, 0, packet_size_); - callback_->OnMoreData(this, buffer_, packet_size_); - } - - // TODO(cpu): flesh out Start and Stop methods. We need a thread to - // perform periodic callbacks. - virtual void Stop() { - } - - virtual void SetVolume(double left_level, double right_level) { - left_volume_ = left_level; - right_volume_ = right_level; - } - - virtual void GetVolume(double* left_level, double* right_level) { - *left_level = left_volume_; - *right_level = right_volume_; - } - - virtual size_t GetNumBuffers() { - return 1; - } - - virtual void Close() { - callback_->OnClose(this); - callback_ = NULL; - manager_->ReleaseStream(this); - } - - char* buffer() { - return buffer_; - } - - private: - AudioManagerWin* manager_; - AudioSourceCallback* callback_; - char* buffer_; - size_t packet_size_; - double left_volume_; - double right_volume_; -}; - namespace { // The next 3 constants are some sensible limits to prevent integer overflow @@ -102,18 +31,10 @@ const int kMaxChannels = 6; const int kMaxSampleRate = 192000; const int kMaxBitsPerSample = 64; -AudioOutputStreamMockWin* g_last_mock_stream = NULL; AudioManagerWin* g_audio_manager = NULL; -void ReplaceLastMockStream(AudioOutputStreamMockWin* newer) { - if (g_last_mock_stream) - delete g_last_mock_stream; - g_last_mock_stream = newer; -} - } // namespace. - bool AudioManagerWin::HasAudioDevices() { return (::waveOutGetNumDevs() != 0); } @@ -122,7 +43,6 @@ bool AudioManagerWin::HasAudioDevices() { // should suffice most windows user's needs. // - PCMWaveOutAudioOutputStream: Based on the waveOutWrite API (in progress) // - PCMDXSoundAudioOutputStream: Based on DirectSound or XAudio (future work). - AudioOutputStream* AudioManagerWin::MakeAudioStream(Format format, int channels, int sample_rate, char bits_per_sample) { @@ -132,7 +52,7 @@ AudioOutputStream* AudioManagerWin::MakeAudioStream(Format format, int channels, return NULL; if (format == AUDIO_MOCK) { - return new AudioOutputStreamMockWin(this); + return FakeAudioOutputStream::MakeFakeStream(); } else if (format == AUDIO_PCM_LINEAR) { return new PCMWaveOutAudioOutputStream(this, channels, sample_rate, bits_per_sample, WAVE_MAPPER); @@ -145,15 +65,6 @@ void AudioManagerWin::ReleaseStream(PCMWaveOutAudioOutputStream* stream) { delete stream; } -void AudioManagerWin::ReleaseStream(AudioOutputStreamMockWin *stream) { - // Note that we keep the last mock stream so GetLastMockBuffer() works. - ReplaceLastMockStream(stream); -} - -const void* AudioManagerWin::GetLastMockBuffer() { - return (g_last_mock_stream) ? g_last_mock_stream->buffer() : NULL; -} - void AudioManagerWin::MuteAll() { } @@ -161,7 +72,6 @@ void AudioManagerWin::UnMuteAll() { } AudioManagerWin::~AudioManagerWin() { - ReplaceLastMockStream(NULL); } void DestroyAudioManagerWin(void* param) { |