11 #include "cores/AudioEngine/Interfaces/AESink.h"    12 #include "cores/AudioEngine/Utils/AEDeviceInfo.h"    13 #include "threads/CriticalSection.h"    17 #include <alsa/asoundlib.h>    19 #define AE_MIN_PERIODSIZE 256    24   const char *GetName()
 override { 
return "ALSA"; }
    29   static void Register();
    30   static std::unique_ptr<IAESink> Create(std::string& device, 
AEAudioFormat& desiredFormat);
    31   static void EnumerateDevicesEx(AEDeviceInfoList &list, 
bool force = 
false);
    32   static void Cleanup();
    34   bool Initialize(
AEAudioFormat &format, std::string &device) 
override;
    35   void Deinitialize() 
override;
    39   double GetCacheTotal() 
override;
    40   unsigned int AddPackets(uint8_t **data, 
unsigned int frames, 
unsigned int offset) 
override;
    41   void Drain() 
override;
    48   static AEChannel ALSAChannelToAEChannel(
unsigned int alsaChannel);
    49   static unsigned int AEChannelToALSAChannel(AEChannel aeChannel);
    50   static CAEChannelInfo ALSAchmapToAEChannelMap(snd_pcm_chmap_t* alsaMap);
    51   static snd_pcm_chmap_t* AEChannelMapToALSAchmap(
const CAEChannelInfo& info);
    52   static snd_pcm_chmap_t* CopyALSAchmap(snd_pcm_chmap_t* alsaMap);
    53   static std::string ALSAchmapToString(snd_pcm_chmap_t* alsaMap);
    57   void GetAESParams(
const AEAudioFormat& format, std::string& params);
    58   void HandleError(
const char* name, 
int err);
    60   std::string m_initDevice;
    63   unsigned int m_bufferSize = 0;
    64   double m_formatSampleRateMul = 0.0;
    65   bool m_passthrough = 
false;
    70   bool m_fragmented = 
false;
    71   unsigned int m_originalPeriodSize = AE_MIN_PERIODSIZE;
    75     unsigned int sampleRate;
    76     unsigned int periodSize;
    77     unsigned int frameSize;
    78     unsigned int channels;
    82   static snd_pcm_format_t AEFormatToALSAFormat(
const enum AEDataFormat format);
    84   bool InitializeHW(
const ALSAConfig &inconfig, ALSAConfig &outconfig);
    85   bool InitializeSW(
const ALSAConfig &inconfig);
    87   static void AppendParams(std::string &device, 
const std::string ¶ms);
    88   static bool TryDevice(
const std::string &name, snd_pcm_t **pcmp, snd_config_t *lconf);
    89   static bool TryDeviceWithParams(
const std::string &name, 
const std::string ¶ms, snd_pcm_t **pcmp, snd_config_t *lconf);
    90   static bool OpenPCMDevice(
const std::string &name, 
const std::string ¶ms, 
int channels, snd_pcm_t **pcmp, snd_config_t *lconf);
    92   static AEDeviceType AEDeviceTypeFromName(
const std::string &name);
    93   static std::string GetParamFromName(
const std::string &name, 
const std::string ¶m);
    94   static void EnumerateDevice(AEDeviceInfoList &list, 
const std::string &device, 
const std::string &description, snd_config_t *
config);
    95   static bool SoundDeviceExists(
const std::string& device);
    96   static bool GetELD(snd_hctl_t *hctl, 
int device, 
CAEDeviceInfo& info, 
bool& badHDMI);
    98   static void sndLibErrorHandler(
const char *file, 
int line, 
const char *
function, 
int err, 
const char *
fmt, ...);
 Definition: deflate.c:123
This classt provides the details of what the audio output hardware is capable of. ...
Definition: AEDeviceInfo.h:31
unsigned int AddPackets(uint8_t **data, unsigned int frames, unsigned int offset) override
Adds packets to be sent out, this routine MUST block or sleep. 
Definition: AESinkALSA.cpp:903
Definition: AEChannelInfo.h:19
Definition: AESinkALSA.h:21
void GetDelay(AEDelayStatus &status) override
Return a timestamped status structure with delay and sink info. 
Definition: AESinkALSA.cpp:879