| Index: media/audio/virtual_audio_output_stream.cc
|
| diff --git a/media/audio/virtual_audio_output_stream.cc b/media/audio/virtual_audio_output_stream.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5b5c834823a84b10d619b788f33cc06bc2cc58af
|
| --- /dev/null
|
| +++ b/media/audio/virtual_audio_output_stream.cc
|
| @@ -0,0 +1,72 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "media/audio/virtual_audio_output_stream.h"
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/bind_helpers.h"
|
| +#include "base/logging.h"
|
| +#include "base/message_loop.h"
|
| +#include "media/audio/audio_manager_base.h"
|
| +
|
| +namespace media {
|
| +
|
| +// static
|
| +AudioOutputStream* VirtualAudioOutputStream::MakeStream(
|
| + AudioManagerBase* manager, const AudioParameters& params) {
|
| + return new VirtualAudioOutputStream(manager, params);
|
| +}
|
| +
|
| +VirtualAudioOutputStream::VirtualAudioOutputStream(
|
| + AudioManagerBase* manager, const AudioParameters& params)
|
| + : audio_manager_(manager),
|
| + params_(params),
|
| + callback_(NULL),
|
| + input_bytes_per_second_(params.GetBytesPerSecond()),
|
| + io_ratio_(0) {
|
| +}
|
| +
|
| +VirtualAudioOutputStream::~VirtualAudioOutputStream() {
|
| + DCHECK(!callback_);
|
| +}
|
| +
|
| +bool VirtualAudioOutputStream::Open() {
|
| + DCHECK(audio_manager_->GetMessageLoop()->BelongsToCurrentThread());
|
| + return true;
|
| +}
|
| +
|
| +void VirtualAudioOutputStream::Start(AudioSourceCallback* callback) {
|
| + DCHECK(audio_manager_->GetMessageLoop()->BelongsToCurrentThread());
|
| + callback_ = callback;
|
| +}
|
| +
|
| +void VirtualAudioOutputStream::Stop() {
|
| + DCHECK(audio_manager_->GetMessageLoop()->BelongsToCurrentThread());
|
| + callback_ = NULL;
|
| +}
|
| +
|
| +void VirtualAudioOutputStream::Close() {
|
| + DCHECK(!callback_);
|
| + DCHECK(audio_manager_->GetMessageLoop()->BelongsToCurrentThread());
|
| + audio_manager_->ReleaseOutputStream(this);
|
| +}
|
| +
|
| +void VirtualAudioOutputStream::SetVolume(double volume) {}
|
| +
|
| +void VirtualAudioOutputStream::GetVolume(double* volume) {
|
| + *volume = 0;
|
| +}
|
| +
|
| +double VirtualAudioOutputStream::ProvideInput(
|
| + AudioBus* audio_bus, base::TimeDelta buffer_delay) {
|
| + if (callback_ == NULL)
|
| + return 0;
|
| +
|
| + audio_bus->Zero();
|
| + int frames = callback_->OnMoreData(audio_bus, AudioBuffersState());
|
| +
|
| + return frames > 0 ? 1 : 0;
|
| +}
|
| +
|
| +} // namespace media
|
|
|