15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/audio/fake_audio_output_stream.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/message_loop/message_loop.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/audio/audio_manager_base.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace media { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AudioOutputStream* FakeAudioOutputStream::MakeFakeStream( 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AudioManagerBase* manager, const AudioParameters& params) { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new FakeAudioOutputStream(manager, params); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FakeAudioOutputStream::FakeAudioOutputStream(AudioManagerBase* manager, 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const AudioParameters& params) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : audio_manager_(manager), 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback_(NULL), 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fake_consumer_(manager->GetMessageLoop(), params) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FakeAudioOutputStream::~FakeAudioOutputStream() { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!callback_); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool FakeAudioOutputStream::Open() { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(audio_manager_->GetMessageLoop()->BelongsToCurrentThread()); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FakeAudioOutputStream::Start(AudioSourceCallback* callback) { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(audio_manager_->GetMessageLoop()->BelongsToCurrentThread()); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback_ = callback; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fake_consumer_.Start(base::Bind( 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &FakeAudioOutputStream::CallOnMoreData, base::Unretained(this))); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FakeAudioOutputStream::Stop() { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(audio_manager_->GetMessageLoop()->BelongsToCurrentThread()); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fake_consumer_.Stop(); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback_ = NULL; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FakeAudioOutputStream::Close() { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!callback_); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(audio_manager_->GetMessageLoop()->BelongsToCurrentThread()); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) audio_manager_->ReleaseOutputStream(this); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FakeAudioOutputStream::SetVolume(double volume) {}; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FakeAudioOutputStream::GetVolume(double* volume) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *volume = 0; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void FakeAudioOutputStream::CallOnMoreData(AudioBus* audio_bus) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(audio_manager_->GetMessageLoop()->BelongsToCurrentThread()); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) callback_->OnMoreData(audio_bus, AudioBuffersState()); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace media 68