fake_audio_output_stream.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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#include "media/audio/fake_audio_output_stream.h"
6
7#include "base/bind.h"
8#include "base/bind_helpers.h"
9#include "base/logging.h"
10#include "base/message_loop.h"
11#include "media/audio/audio_manager_base.h"
12
13namespace media {
14
15// static
16AudioOutputStream* FakeAudioOutputStream::MakeFakeStream(
17    AudioManagerBase* manager, const AudioParameters& params) {
18  return new FakeAudioOutputStream(manager, params);
19}
20
21FakeAudioOutputStream::FakeAudioOutputStream(AudioManagerBase* manager,
22                                             const AudioParameters& params)
23    : audio_manager_(manager),
24      callback_(NULL),
25      fake_consumer_(manager->GetMessageLoop(), params) {
26}
27
28FakeAudioOutputStream::~FakeAudioOutputStream() {
29  DCHECK(!callback_);
30}
31
32bool FakeAudioOutputStream::Open() {
33  DCHECK(audio_manager_->GetMessageLoop()->BelongsToCurrentThread());
34  return true;
35}
36
37void FakeAudioOutputStream::Start(AudioSourceCallback* callback)  {
38  DCHECK(audio_manager_->GetMessageLoop()->BelongsToCurrentThread());
39  callback_ = callback;
40  fake_consumer_.Start(base::Bind(
41      &FakeAudioOutputStream::CallOnMoreData, base::Unretained(this)));
42}
43
44void FakeAudioOutputStream::Stop() {
45  DCHECK(audio_manager_->GetMessageLoop()->BelongsToCurrentThread());
46  fake_consumer_.Stop();
47  callback_ = NULL;
48}
49
50void FakeAudioOutputStream::Close() {
51  DCHECK(!callback_);
52  DCHECK(audio_manager_->GetMessageLoop()->BelongsToCurrentThread());
53  audio_manager_->ReleaseOutputStream(this);
54}
55
56void FakeAudioOutputStream::SetVolume(double volume) {};
57
58void FakeAudioOutputStream::GetVolume(double* volume) {
59  *volume = 0;
60};
61
62void FakeAudioOutputStream::CallOnMoreData(AudioBus* audio_bus) {
63  DCHECK(audio_manager_->GetMessageLoop()->BelongsToCurrentThread());
64  callback_->OnMoreData(audio_bus, AudioBuffersState());
65}
66
67}  // namespace media
68