// 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 <memory>
#include <string>


namespace media {

class AudioParameters;

// AudioLog logs state information about an active audio component.
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(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() = 0;

  // Called when an audio component is stopped, generally this is synonymous
  // with "paused."
  virtual void OnStopped() = 0;

  // Called when an audio component is closed, generally this is synonymous
  // with "deleted."
  virtual void OnClosed() = 0;

  // Called when an audio component encounters an error.
  virtual void OnError() = 0;

  // Called when an audio component changes volume.  |volume| is the new volume.
  virtual void OnSetVolume(double volume) = 0;

  // Called when an audio component wants to forward a log message.
  virtual void OnLogMessage(const std::string& message) = 0;
};

// AudioLogFactory dispenses AudioLog instances for tracking AudioComponent
// behavior.
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 instance of
  // the given component.  Each instance of an "owning" class must create its
  // own AudioLog.
  virtual std::unique_ptr<AudioLog> CreateAudioLog(AudioComponent component,
                                                   int component_id) = 0;

 protected:
  virtual ~AudioLogFactory() {}
};

}  // namespace media

#endif  // MEDIA_AUDIO_AUDIO_LOGGING_H_
