Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2016 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/virtual_audio_sink.h" | |
| 6 | |
| 7 #include "media/audio/virtual_audio_input_stream.h" | |
| 8 | |
| 9 namespace media { | |
| 10 | |
| 11 static const base::TimeDelta kBufferSize = base::TimeDelta::FromSeconds(1); | |
| 12 static const base::TimeDelta kClockAccuracy = | |
| 13 base::TimeDelta::FromMilliseconds(1); | |
| 14 static const base::TimeDelta kAdjustTime = base::TimeDelta::FromSeconds(1); | |
| 15 | |
| 16 VirtualAudioSink::VirtualAudioSink(AudioParameters param, | |
| 17 VirtualAudioInputStream* target, | |
| 18 AfterCloseCallback callback) | |
| 19 : started_(false), | |
| 20 params_(param), | |
| 21 target_(target), | |
| 22 shifter_(new AudioShifter(kBufferSize, | |
| 23 kClockAccuracy, | |
| 24 kAdjustTime, | |
| 25 param.sample_rate(), | |
| 26 param.channels())), | |
| 27 after_close_callback_(callback) {} | |
| 28 | |
| 29 VirtualAudioSink::~VirtualAudioSink() {} | |
| 30 | |
| 31 void VirtualAudioSink::Start() { | |
| 32 started_ = true; | |
| 33 target_->AddOutputStream(this, params_); | |
| 34 } | |
| 35 | |
| 36 void VirtualAudioSink::Stop() { | |
| 37 target_->RemoveOutputStream(this, params_); | |
| 38 started_ = false; | |
| 39 } | |
| 40 | |
| 41 void VirtualAudioSink::Close() { | |
| 42 if (started_) | |
| 43 Stop(); | |
| 44 AfterCloseCallback cb = after_close_callback_; | |
|
miu
2016/04/21 00:15:25
nit: The rest of this method should be (using exis
qiangchen
2016/04/28 00:00:56
Done.
| |
| 45 if (!cb.is_null()) | |
| 46 cb.Run(this); | |
| 47 } | |
| 48 | |
| 49 void VirtualAudioSink::OnData(const AudioBus* source) { | |
| 50 std::unique_ptr<AudioBus> source_copy = AudioBus::Create(params_); | |
| 51 source->CopyTo(source_copy.get()); | |
| 52 shifter_->Push(std::move(source_copy), base::TimeTicks::Now()); | |
| 53 } | |
| 54 | |
| 55 double VirtualAudioSink::ProvideInput(AudioBus* audio_bus, | |
| 56 base::TimeDelta buffer_delay) { | |
| 57 shifter_->Pull(audio_bus, base::TimeTicks::Now()); | |
|
miu
2016/04/21 00:15:25
|buffer_delay| must be accounted for in the second
qiangchen
2016/04/28 00:00:56
Done.
| |
| 58 return 1; | |
| 59 } | |
| 60 } | |
| OLD | NEW |