| // 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. |
| |
| #ifndef MEDIA_AUDIO_AUDIO_LOGGING_H_ |
| #define MEDIA_AUDIO_AUDIO_LOGGING_H_ |
| |
| #include <string> |
| |
| #include "base/memory/scoped_ptr.h" |
| |
| namespace media { |
| class AudioParameters; |
| |
| // AudioLog logs state information about an active audio component. Each method |
| // takes a |component_id| along with method specific information. Its methods |
| // are safe to call from any thread. |
| class AudioLog { |
| public: |
| virtual ~AudioLog() {} |
| |
| // Called when an audio component is created. |params| are the parameters of |
| // the created stream. |device_id| is the id of the audio device opened by |
| // the created stream. |
| virtual void OnCreated(int component_id, |
| const media::AudioParameters& params, |
| const std::string& device_id) = 0; |
| |
| // Called when an audio component is started, generally this is synonymous |
| // with "playing." |
| virtual void OnStarted(int component_id) = 0; |
| |
| // Called when an audio component is stopped, generally this is synonymous |
| // with "paused." |
| virtual void OnStopped(int component_id) = 0; |
| |
| // Called when an audio component is closed, generally this is synonymous |
| // with "deleted." |
| virtual void OnClosed(int component_id) = 0; |
| |
| // Called when an audio component encounters an error. |
| virtual void OnError(int component_id) = 0; |
| |
| // Called when an audio component changes volume. |volume| is the new volume. |
| virtual void OnSetVolume(int component_id, double volume) = 0; |
| }; |
| |
| // AudioLogFactory dispenses AudioLog instances to owning classes for tracking |
| // AudioComponent behavior. All AudioComponents have the concept of an owning |
| // class: |
| // |
| // - AudioInputRendererHost for AudioInputController |
| // - AudioRendererHost for AudioOutputController |
| // - AudioOutputDispatcherImpl for AudioOutputStream |
| // |
| // Each of these owning classes may own multiple instances of each component, as |
| // such each AudioLog supports logging for multiple instances. |
| class AudioLogFactory { |
| public: |
| enum AudioComponent { |
| // Input controllers have a 1:1 mapping with streams, so there's no need to |
| // track both controllers and streams. |
| AUDIO_INPUT_CONTROLLER, |
| // Output controllers may or may not be backed by an active stream, so we |
| // need to track both controllers and streams. |
| AUDIO_OUTPUT_CONTROLLER, |
| AUDIO_OUTPUT_STREAM, |
| AUDIO_COMPONENT_MAX |
| }; |
| |
| // Create a new AudioLog object for tracking the behavior for one or more |
| // instances of the given component. Each instance of an "owning" class must |
| // create its own AudioLog. |
| virtual scoped_ptr<AudioLog> CreateAudioLog(AudioComponent component) = 0; |
| |
| protected: |
| virtual ~AudioLogFactory() {} |
| }; |
| |
| } // namespace media |
| |
| #endif // MEDIA_AUDIO_AUDIO_LOGGING_H_ |