// Copyright 2018 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 REMOTING_CLIENT_AUDIO_AUDIO_PLAYBACK_STREAM_H_
#define REMOTING_CLIENT_AUDIO_AUDIO_PLAYBACK_STREAM_H_

#include <memory>

#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "base/single_thread_task_runner.h"
#include "base/threading/thread_checker.h"
#include "remoting/protocol/audio_stub.h"

namespace remoting {

class AudioPlaybackSink;

// An AudioStub implementation that buffers AudioPackets and feeds them to
// an AudioPlaybackSink.
// AudioPlaybackStream must be used and destroyed on the same thread after it
// is created, while it will use and destroy |audio_sink| on the thread of
// |audio_task_runner|.
class AudioPlaybackStream : public protocol::AudioStub {
 public:
  // |audio_sink|: The AudioPlaybackSink that receives audio data.
  // |audio_task_runner|: The task runner where |audio_sink| will be run.
  AudioPlaybackStream(
      std::unique_ptr<AudioPlaybackSink> audio_sink,
      scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner);

  ~AudioPlaybackStream() override;

  // AudioStub implementations.
  void ProcessAudioPacket(std::unique_ptr<AudioPacket> packet,
                          const base::RepeatingClosure& done) override;

 private:
  class Core;

  THREAD_CHECKER(thread_checker_);

  std::unique_ptr<Core> core_;

  scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner_;

  DISALLOW_COPY_AND_ASSIGN(AudioPlaybackStream);
};

}  // namespace remoting

#endif  // REMOTING_CLIENT_AUDIO_AUDIO_PLAYBACK_STREAM_H_
