#ifndef MEDIA_AUDIO_ANDROID_AAUDIO_BLUETOOTH_OUTPUT_H_
#define MEDIA_AUDIO_ANDROID_AAUDIO_BLUETOOTH_OUTPUT_H_
#include <aaudio/AAudio.h>
#include "base/android/requires_api.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/raw_ref.h"
#include "media/audio/android/aaudio_output.h"
#include "media/audio/android/audio_device.h"
#include "media/audio/android/muteable_audio_output_stream.h"
#include "media/base/audio_parameters.h"
namespace media {
class AudioManagerAndroid;
class AAudioBluetoothOutputStream : public MuteableAudioOutputStream {
public:
AAudioBluetoothOutputStream(
AudioManagerAndroid& manager,
const AudioParameters& params,
android::AudioDevice device,
bool use_sco_device,
aaudio_usage_t usage,
AmplitudePeakDetector::PeakDetectedCB peak_detected_cb);
~AAudioBluetoothOutputStream() override;
bool Open() override;
void Close() override;
void Start(AudioSourceCallback* callback) override;
void Stop() override;
void Flush() override;
void SetVolume(double volume) override;
void GetVolume(double* volume) override;
void SetMute(bool muted) override;
void SetUseSco(bool use_sco_device);
private:
AAudioOutputStream& GetActiveInnerStream() const;
const raw_ref<AudioManagerAndroid> manager_;
bool use_sco_;
std::unique_ptr<AAudioOutputStream> inner_a2dp_stream_;
std::unique_ptr<AAudioOutputStream> inner_sco_stream_;
raw_ptr<AudioSourceCallback> callback_ = nullptr;
};
}
#endif