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 3// found in the LICENSE file. 4 5#ifndef MEDIA_AUDIO_NULL_AUDIO_SINK_H_ 6#define MEDIA_AUDIO_NULL_AUDIO_SINK_H_ 7 8#include <string> 9 10#include "base/memory/scoped_ptr.h" 11#include "media/base/audio_renderer_sink.h" 12 13namespace base { 14class SingleThreadTaskRunner; 15} 16 17namespace media { 18class AudioBus; 19class AudioHash; 20class FakeAudioConsumer; 21 22class MEDIA_EXPORT NullAudioSink 23 : NON_EXPORTED_BASE(public AudioRendererSink) { 24 public: 25 NullAudioSink(const scoped_refptr<base::SingleThreadTaskRunner>& task_runner); 26 27 // AudioRendererSink implementation. 28 virtual void Initialize(const AudioParameters& params, 29 RenderCallback* callback) OVERRIDE; 30 virtual void Start() OVERRIDE; 31 virtual void Stop() OVERRIDE; 32 virtual void Pause() OVERRIDE; 33 virtual void Play() OVERRIDE; 34 virtual bool SetVolume(double volume) OVERRIDE; 35 36 // Enables audio frame hashing. Must be called prior to Initialize(). 37 void StartAudioHashForTesting(); 38 39 // Returns the hash of all audio frames seen since construction. 40 std::string GetAudioHashForTesting(); 41 42 protected: 43 virtual ~NullAudioSink(); 44 45 private: 46 // Task that periodically calls Render() to consume audio data. 47 void CallRender(AudioBus* audio_bus); 48 49 bool initialized_; 50 bool playing_; 51 RenderCallback* callback_; 52 53 // Controls whether or not a running hash is computed for audio frames. 54 scoped_ptr<AudioHash> audio_hash_; 55 56 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 57 scoped_ptr<FakeAudioConsumer> fake_consumer_; 58 59 DISALLOW_COPY_AND_ASSIGN(NullAudioSink); 60}; 61 62} // namespace media 63 64#endif // MEDIA_AUDIO_NULL_AUDIO_SINK_H_ 65