| // Copyright 2013 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 "cobalt/media/base/fake_audio_renderer_sink.h" |
| |
| #include "base/bind.h" |
| #include "base/location.h" |
| #include "base/logging.h" |
| |
| namespace cobalt { |
| namespace media { |
| |
| FakeAudioRendererSink::FakeAudioRendererSink() |
| : FakeAudioRendererSink( |
| AudioParameters(AudioParameters::AUDIO_FAKE, CHANNEL_LAYOUT_STEREO, |
| AudioParameters::kTelephoneSampleRate, 16, 1)) {} |
| |
| FakeAudioRendererSink::FakeAudioRendererSink( |
| const AudioParameters& hardware_params) |
| : state_(kUninitialized), |
| callback_(NULL), |
| output_device_info_(std::string(), OUTPUT_DEVICE_STATUS_OK, |
| hardware_params) {} |
| |
| FakeAudioRendererSink::~FakeAudioRendererSink() { DCHECK(!callback_); } |
| |
| void FakeAudioRendererSink::Initialize(const AudioParameters& params, |
| RenderCallback* callback) { |
| DCHECK_EQ(state_, kUninitialized); |
| DCHECK(!callback_); |
| DCHECK(callback); |
| |
| callback_ = callback; |
| ChangeState(kInitialized); |
| } |
| |
| void FakeAudioRendererSink::Start() { |
| DCHECK_EQ(state_, kInitialized); |
| ChangeState(kStarted); |
| } |
| |
| void FakeAudioRendererSink::Stop() { |
| callback_ = NULL; |
| ChangeState(kStopped); |
| } |
| |
| void FakeAudioRendererSink::Pause() { |
| DCHECK(state_ == kStarted || state_ == kPlaying) << "state_ " << state_; |
| ChangeState(kPaused); |
| } |
| |
| void FakeAudioRendererSink::Play() { |
| DCHECK(state_ == kStarted || state_ == kPaused) << "state_ " << state_; |
| DCHECK_EQ(state_, kPaused); |
| ChangeState(kPlaying); |
| } |
| |
| bool FakeAudioRendererSink::SetVolume(double volume) { return true; } |
| |
| OutputDeviceInfo FakeAudioRendererSink::GetOutputDeviceInfo() { |
| return output_device_info_; |
| } |
| |
| bool FakeAudioRendererSink::CurrentThreadIsRenderingThread() { |
| NOTIMPLEMENTED(); |
| return false; |
| } |
| |
| bool FakeAudioRendererSink::Render(AudioBus* dest, uint32_t frames_delayed, |
| int* frames_written) { |
| if (state_ != kPlaying) return false; |
| |
| *frames_written = callback_->Render(dest, frames_delayed, 0); |
| return true; |
| } |
| |
| void FakeAudioRendererSink::OnRenderError() { |
| DCHECK_NE(state_, kUninitialized); |
| DCHECK_NE(state_, kStopped); |
| |
| callback_->OnRenderError(); |
| } |
| |
| void FakeAudioRendererSink::ChangeState(State new_state) { |
| static const char* kStateNames[] = {"kUninitialized", "kInitialized", |
| "kStarted", "kPaused", |
| "kPlaying", "kStopped"}; |
| |
| DVLOG(1) << __FUNCTION__ << " : " << kStateNames[state_] << " -> " |
| << kStateNames[new_state]; |
| state_ = new_state; |
| } |
| |
| } // namespace media |
| } // namespace cobalt |