#ifndef REMOTING_PROTOCOL_AUDIO_PUMP_H_
#define REMOTING_PROTOCOL_AUDIO_PUMP_H_
#include <memory>
#include "base/memory/raw_ptr.h"
#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
#include "base/threading/thread_checker.h"
#include "remoting/protocol/audio_stream.h"
namespace base {
class SingleThreadTaskRunner;
}
namespace remoting {
class AudioEncoder;
class AudioPacket;
namespace protocol {
class AudioStub;
class AudioSource;
class AudioPump : public AudioStream {
public:
AudioPump(scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner,
std::unique_ptr<AudioSource> audio_source,
std::unique_ptr<AudioEncoder> audio_encoder,
AudioStub* audio_stub);
AudioPump(const AudioPump&) = delete;
AudioPump& operator=(const AudioPump&) = delete;
~AudioPump() override;
void Pause(bool pause) override;
private:
class Core;
void SendAudioPacket(std::unique_ptr<AudioPacket> packet, int size);
void OnPacketSent(int size);
scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner_;
raw_ptr<AudioStub> audio_stub_;
std::unique_ptr<Core> core_;
THREAD_CHECKER(thread_checker_);
base::WeakPtrFactory<AudioPump> weak_factory_{this};
};
}
}
#endif