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)#ifndef MEDIA_AUDIO_FAKE_AUDIO_OUTPUT_STREAM_H_ 67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define MEDIA_AUDIO_FAKE_AUDIO_OUTPUT_STREAM_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/audio/audio_io.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/audio/audio_parameters.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "media/audio/fake_audio_consumer.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace media { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AudioManagerBase; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A fake implementation of AudioOutputStream. Used for testing and when a real 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// audio output device is unavailable or refusing output (e.g. remote desktop). 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Callbacks are driven on the AudioManager's message loop. 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MEDIA_EXPORT FakeAudioOutputStream : public AudioOutputStream { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static AudioOutputStream* MakeFakeStream(AudioManagerBase* manager, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const AudioParameters& params); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AudioOutputStream implementation. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Open() OVERRIDE; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Start(AudioSourceCallback* callback) OVERRIDE; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Stop() OVERRIDE; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetVolume(double volume) OVERRIDE; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetVolume(double* volume) OVERRIDE; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Close() OVERRIDE; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FakeAudioOutputStream(AudioManagerBase* manager, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const AudioParameters& params); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~FakeAudioOutputStream(); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Task that periodically calls OnMoreData() to consume audio data. 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CallOnMoreData(AudioBus* audio_bus); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AudioManagerBase* audio_manager_; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AudioSourceCallback* callback_; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FakeAudioConsumer fake_consumer_; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeAudioOutputStream); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace media 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // MEDIA_AUDIO_FAKE_AUDIO_OUTPUT_STREAM_H_ 51