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"
8 #include "media/audio/audio_manager_base.h"
11 using base::TimeDelta
;
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
),
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_
);
40 void FakeAudioInputStream::Start(AudioInputCallback
* callback
) {
41 DCHECK(!thread_
.IsRunning());
43 last_callback_time_
= Time::Now();
45 thread_
.message_loop()->PostDelayedTask(
47 base::Bind(&FakeAudioInputStream::DoCallback
, base::Unretained(this)),
51 void FakeAudioInputStream::DoCallback() {
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
61 if (next_callback_time
< base::TimeDelta())
62 next_callback_time
= base::TimeDelta();
64 last_callback_time_
= now
;
65 thread_
.message_loop()->PostDelayedTask(
67 base::Bind(&FakeAudioInputStream::DoCallback
, base::Unretained(this)),
71 void FakeAudioInputStream::Stop() {
75 void FakeAudioInputStream::Close() {
77 callback_
->OnClose(this);
80 audio_manager_
->ReleaseInputStream(this);
83 double FakeAudioInputStream::GetMaxVolume() {
87 void FakeAudioInputStream::SetVolume(double volume
) {}
89 double FakeAudioInputStream::GetVolume() {
93 void FakeAudioInputStream::SetAutomaticGainControl(bool enabled
) {}
95 bool FakeAudioInputStream::GetAutomaticGainControl() {