#ifndef MEDIA_AUDIO_CRAS_CRAS_UTIL_H_
#define MEDIA_AUDIO_CRAS_CRAS_UTIL_H_
#include <cras_client.h>
#include <cstdint>
#include <string>
#include <vector>
#include "media/base/media_export.h"
namespace media {
const int kCrasConnectTimeoutMs = 1000;
enum class DeviceType { kInput, kOutput };
struct MEDIA_EXPORT CrasDevice {
CrasDevice();
CrasDevice(const CrasDevice&);
~CrasDevice();
explicit CrasDevice(struct libcras_node_info* node, DeviceType type);
explicit CrasDevice(DeviceType type,
uint64_t id,
uint32_t dev_idx,
uint32_t max_supported_channels,
bool plugged,
bool active,
std::string node_type,
std::string name,
std::string dev_name);
DeviceType type;
uint64_t id;
uint32_t dev_idx;
uint32_t max_supported_channels;
bool plugged;
bool active;
std::string node_type;
std::string name;
std::string dev_name;
};
class MEDIA_EXPORT CrasUtil {
public:
CrasUtil();
virtual ~CrasUtil();
virtual std::vector<CrasDevice> CrasGetAudioDevices(DeviceType type);
virtual int CrasGetAecSupported();
virtual int CrasGetAgcSupported();
virtual int CrasGetNsSupported();
virtual int CrasGetVoiceIsolationSupported();
virtual int CrasGetAecGroupId();
virtual int CrasGetDefaultOutputBufferSize();
private:
int aec_supported_ = false;
int agc_supported_ = false;
int ns_supported_ = false;
int voice_isolation_supported_ = false;
int aec_group_id_ = -1;
int default_output_buffer_size_ = 0;
bool cras_effects_cached_ = false;
bool CacheEffects();
};
}
#endif