Home | History | Annotate | Download | only in base
      1 // Copyright 2013 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/base/fake_audio_renderer_sink.h"
      6 
      7 #include "base/logging.h"
      8 
      9 namespace media {
     10 
     11 FakeAudioRendererSink::FakeAudioRendererSink()
     12     : state_(kUninitialized),
     13       callback_(NULL) {
     14 }
     15 
     16 FakeAudioRendererSink::~FakeAudioRendererSink() {
     17   DCHECK(!callback_);
     18 }
     19 
     20 void FakeAudioRendererSink::Initialize(const AudioParameters& params,
     21                                        RenderCallback* callback) {
     22   DCHECK_EQ(state_, kUninitialized);
     23   DCHECK(!callback_);
     24   DCHECK(callback);
     25 
     26   callback_ = callback;
     27   ChangeState(kInitialized);
     28 }
     29 
     30 void FakeAudioRendererSink::Start() {
     31   DCHECK_EQ(state_, kInitialized);
     32   ChangeState(kStarted);
     33 }
     34 
     35 void FakeAudioRendererSink::Stop() {
     36   callback_ = NULL;
     37   ChangeState(kStopped);
     38 }
     39 
     40 void FakeAudioRendererSink::Pause() {
     41   DCHECK(state_ == kStarted || state_ == kPlaying) << "state_ " << state_;
     42   ChangeState(kPaused);
     43 }
     44 
     45 void FakeAudioRendererSink::Play() {
     46   DCHECK(state_ == kStarted || state_ == kPaused) << "state_ " << state_;
     47   DCHECK_EQ(state_, kPaused);
     48   ChangeState(kPlaying);
     49 }
     50 
     51 bool FakeAudioRendererSink::SetVolume(double volume) {
     52   return true;
     53 }
     54 
     55 bool FakeAudioRendererSink::Render(AudioBus* dest, int audio_delay_milliseconds,
     56                                    int* frames_written) {
     57   if (state_ != kPlaying)
     58     return false;
     59 
     60   *frames_written = callback_->Render(dest, audio_delay_milliseconds);
     61   return true;
     62 }
     63 
     64 void FakeAudioRendererSink::OnRenderError() {
     65   DCHECK_NE(state_, kUninitialized);
     66   DCHECK_NE(state_, kStopped);
     67 
     68   callback_->OnRenderError();
     69 }
     70 
     71 void FakeAudioRendererSink::ChangeState(State new_state) {
     72   static const char* kStateNames[] = {
     73     "kUninitialized",
     74     "kInitialized",
     75     "kStarted",
     76     "kPaused",
     77     "kPlaying",
     78     "kStopped"
     79   };
     80 
     81   DVLOG(1) << __FUNCTION__ << " : "
     82            << kStateNames[state_] << " -> " << kStateNames[new_state];
     83   state_ = new_state;
     84 }
     85 
     86 }  // namespace media
     87