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