#ifndef SERVICES_AUDIO_LOOPBACK_REFERENCE_MANAGER_H_
#define SERVICES_AUDIO_LOOPBACK_REFERENCE_MANAGER_H_
#include <string>
#include <string_view>
#include "base/memory/raw_ptr.h"
#include "base/sequence_checker.h"
#include "media/audio/audio_manager.h"
#include "services/audio/reference_signal_provider.h"
namespace audio {
class LoopbackReferenceManagerCore;
class LoopbackReferenceStreamIdProvider;
class LoopbackReferenceManager : public ReferenceSignalProviderFactory {
public:
explicit LoopbackReferenceManager(media::AudioManager* audio_manager);
LoopbackReferenceManager(const LoopbackReferenceManager&) = delete;
LoopbackReferenceManager& operator=(const LoopbackReferenceManager&) = delete;
~LoopbackReferenceManager() override;
std::unique_ptr<ReferenceSignalProvider> GetReferenceSignalProvider() final;
private:
void OnCoreError();
SEQUENCE_CHECKER(owning_sequence_);
const raw_ptr<media::AudioManager> audio_manager_;
const std::unique_ptr<LoopbackReferenceStreamIdProvider> stream_id_provider_;
std::unique_ptr<LoopbackReferenceManagerCore> core_;
base::WeakPtrFactory<LoopbackReferenceManager> weak_ptr_factory_{this};
};
}
#endif