text: // Copyright 2021 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 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;
  
     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_
  