#pragma once
#include <memory>
#include "api/scoped_refptr.h"
#include "livekit/adm_proxy.h"
#include "rust/cxx.h"
namespace livekit_ffi {
class AudioDeviceController {
public:
explicit AudioDeviceController(webrtc::scoped_refptr<AdmProxy> adm_proxy);
int16_t playout_devices() const;
int16_t recording_devices() const;
rust::String playout_device_name(uint16_t index) const;
rust::String recording_device_name(uint16_t index) const;
rust::String playout_device_guid(uint16_t index) const;
rust::String recording_device_guid(uint16_t index) const;
bool set_playout_device(uint16_t index) const;
bool set_recording_device(uint16_t index) const;
bool set_playout_device_by_guid(rust::String guid) const;
bool set_recording_device_by_guid(rust::String guid) const;
bool stop_recording() const;
bool init_recording() const;
bool start_recording() const;
bool recording_is_initialized() const;
bool stop_playout() const;
bool init_playout() const;
bool start_playout() const;
bool playout_is_initialized() const;
bool builtin_aec_is_available() const;
bool builtin_agc_is_available() const;
bool builtin_ns_is_available() const;
bool enable_builtin_aec(bool enable) const;
bool enable_builtin_agc(bool enable) const;
bool enable_builtin_ns(bool enable) const;
void set_adm_recording_enabled(bool enabled) const;
bool adm_recording_enabled() const;
void set_adm_playout_enabled(bool enabled) const;
bool adm_playout_enabled() const;
bool acquire_platform_adm() const;
void release_platform_adm() const;
int platform_adm_ref_count() const;
bool is_platform_adm_active() const;
private:
webrtc::scoped_refptr<AdmProxy> adm_proxy_;
};
}