Move media/audio files into media namespace
[chromium-blink-merge.git] / media / audio / fake_audio_input_stream.cc
blob47366a0b0c91f9626104d38f9998809338e31a69
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.
5 #include "media/audio/fake_audio_input_stream.h"
7 #include "base/bind.h"
8 #include "media/audio/audio_manager_base.h"
10 using base::Time;
11 using base::TimeDelta;
13 namespace media {
15 AudioInputStream* FakeAudioInputStream::MakeFakeStream(
16 AudioManagerBase* manager,
17 const AudioParameters& params) {
18 return new FakeAudioInputStream(manager, params);
21 FakeAudioInputStream::FakeAudioInputStream(AudioManagerBase* manager,
22 const AudioParameters& params)
23 : audio_manager_(manager),
24 callback_(NULL),
25 buffer_size_((params.channels() * params.bits_per_sample() *
26 params.frames_per_buffer()) / 8),
27 thread_("FakeAudioRecordingThread"),
28 callback_interval_(base::TimeDelta::FromMilliseconds(
29 (params.frames_per_buffer() * 1000) / params.sample_rate())) {
32 FakeAudioInputStream::~FakeAudioInputStream() {}
34 bool FakeAudioInputStream::Open() {
35 buffer_.reset(new uint8[buffer_size_]);
36 memset(buffer_.get(), 0, buffer_size_);
37 return true;
40 void FakeAudioInputStream::Start(AudioInputCallback* callback) {
41 DCHECK(!thread_.IsRunning());
42 callback_ = callback;
43 last_callback_time_ = Time::Now();
44 thread_.Start();
45 thread_.message_loop()->PostDelayedTask(
46 FROM_HERE,
47 base::Bind(&FakeAudioInputStream::DoCallback, base::Unretained(this)),
48 callback_interval_);
51 void FakeAudioInputStream::DoCallback() {
52 DCHECK(callback_);
53 callback_->OnData(this, buffer_.get(), buffer_size_, buffer_size_, 0.0);
55 Time now = Time::Now();
56 base::TimeDelta next_callback_time =
57 last_callback_time_ + callback_interval_ * 2 - now;
59 // If we are falling behind, try to catch up as much as we can in the next
60 // callback.
61 if (next_callback_time < base::TimeDelta())
62 next_callback_time = base::TimeDelta();
64 last_callback_time_ = now;
65 thread_.message_loop()->PostDelayedTask(
66 FROM_HERE,
67 base::Bind(&FakeAudioInputStream::DoCallback, base::Unretained(this)),
68 next_callback_time);
71 void FakeAudioInputStream::Stop() {
72 thread_.Stop();
75 void FakeAudioInputStream::Close() {
76 if (callback_) {
77 callback_->OnClose(this);
78 callback_ = NULL;
80 audio_manager_->ReleaseInputStream(this);
83 double FakeAudioInputStream::GetMaxVolume() {
84 return 0.0;
87 void FakeAudioInputStream::SetVolume(double volume) {}
89 double FakeAudioInputStream::GetVolume() {
90 return 0.0;
93 void FakeAudioInputStream::SetAutomaticGainControl(bool enabled) {}
95 bool FakeAudioInputStream::GetAutomaticGainControl() {
96 return false;
99 } // namespace media