diff options
author | vrk@chromium.org <vrk@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-06 03:17:44 +0000 |
---|---|---|
committer | vrk@chromium.org <vrk@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-06 03:17:44 +0000 |
commit | e4fc09e874d7a7fc87dc1565452d32985949a3cf (patch) | |
tree | 8a8a5f596294a3db7c6aa3998b8562a4b24e60e9 /media/audio/null_audio_sink.h | |
parent | f2ebbf06167ad4ff8cb23109b3652c8c4b7ff5f7 (diff) | |
download | chromium_src-e4fc09e874d7a7fc87dc1565452d32985949a3cf.zip chromium_src-e4fc09e874d7a7fc87dc1565452d32985949a3cf.tar.gz chromium_src-e4fc09e874d7a7fc87dc1565452d32985949a3cf.tar.bz2 |
Merge AudioRendererImpl and AudioRendererBase; add NullAudioSink
This CL removes AudioRendererImpl and replaces it with AudioRendererBase.
NullAudioRenderer is also removed and replaced with NullAudioSink.
Also, a subtle bug is fixed in AudioRendererBase to allow for smooth
video playback when running Chrome with the --disable-audio flag.
BUG=119549,116645
TEST=media_unittests, playing video on Chrome/content_shell with and without --disable-audio flag should look identical
Review URL: http://codereview.chromium.org/9826023
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@131089 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/audio/null_audio_sink.h')
-rw-r--r-- | media/audio/null_audio_sink.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/media/audio/null_audio_sink.h b/media/audio/null_audio_sink.h new file mode 100644 index 0000000..32245eb --- /dev/null +++ b/media/audio/null_audio_sink.h @@ -0,0 +1,65 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MEDIA_FILTERS_NULL_AUDIO_RENDERER_H_ +#define MEDIA_FILTERS_NULL_AUDIO_RENDERER_H_ + +// NullAudioSink effectively uses an extra thread to "throw away" the +// audio data at a rate resembling normal playback speed. It's just like +// decoding to /dev/null! +// +// NullAudioSink can also be used in situations where the client has no +// audio device or we haven't written an audio implementation for a particular +// platform yet. + +#include <vector> + +#include "base/threading/thread.h" +#include "media/base/audio_renderer_sink.h" + +namespace media { + +class MEDIA_EXPORT NullAudioSink + : NON_EXPORTED_BASE(public AudioRendererSink) { + public: + NullAudioSink(); + virtual ~NullAudioSink(); + + // AudioRendererSink implementation. + virtual void Initialize(const AudioParameters& params, + RenderCallback* callback) OVERRIDE; + virtual void Start() OVERRIDE; + virtual void Stop() OVERRIDE; + virtual void Pause(bool flush) OVERRIDE; + virtual void Play() OVERRIDE; + virtual void SetPlaybackRate(float rate) OVERRIDE; + virtual bool SetVolume(double volume) OVERRIDE; + virtual void GetVolume(double* volume) OVERRIDE; + + private: + // Audio thread task that periodically calls FillBuffer() to consume + // audio data. + void FillBufferTask(); + + void SetPlaying(bool is_playing); + + // A buffer passed to FillBuffer to advance playback. + std::vector<float*> audio_data_; + + AudioParameters params_; + bool initialized_; + float playback_rate_; + bool playing_; + RenderCallback* callback_; + + // Separate thread used to throw away data. + base::Thread thread_; + base::Lock lock_; + + DISALLOW_COPY_AND_ASSIGN(NullAudioSink); +}; + +} // namespace media + +#endif // MEDIA_FILTERS_NULL_AUDIO_RENDERER_H_ |