// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SERVICES_AUDIO_REFERENCE_OUTPUT_H_
#define SERVICES_AUDIO_REFERENCE_OUTPUT_H_

#include "base/time/time.h"

namespace media {
class AudioBus;
}  // namespace media

namespace audio {
class ReferenceOutput {
 public:
  class Listener {
   public:
    // Provides read-only access to the auio played by ReferenceOutput.
    // Must execute quickly, as it will typically be called on a realtime
    // thread; otherwise, audio glitches may occur.
    virtual void OnPlayoutData(const media::AudioBus& audio_bus,
                               int sample_rate,
                               base::TimeDelta audio_delay) = 0;

    // Called if an error occurred in the reference stream. Called on the same
    // sequence as StartListening.
    virtual void OnReferenceStreamError() = 0;

   protected:
    virtual ~Listener() = default;
  };

  // Starts/Stops listening to the reference output.
  virtual void StartListening(Listener* listener) = 0;
  virtual void StopListening(Listener* listener) = 0;

 protected:
  virtual ~ReferenceOutput() = default;
};
}  // namespace audio

#endif  // SERVICES_AUDIO_REFERENCE_OUTPUT_H_
