IAudioRenderer* CAudioRendererFactory::CreateAudioRenderer(IAudioCallback* pCallback, int iChannels, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, const char* strAudioCodec, bool bIsMusic, bool bPassthrough) { IAudioRenderer* audioSink = NULL; /* First pass creation */ #ifdef HAS_PULSEAUDIO audioSink = new CPulseAudioDirectSound(); ReturnOnValidInitialize(); #endif /* incase none in the first pass was able to be created, fall back to os specific */ #ifdef WIN32 audioSink = new CWin32DirectSound(); ReturnOnValidInitialize(); #endif #ifdef __APPLE__ audioSink = new PortAudioDirectSound(); ReturnOnValidInitialize(); #elif defined(_LINUX) audioSink = new CALSADirectSound(); ReturnOnValidInitialize(); #endif audioSink = new CNullDirectSound(); audioSink->Initialize(pCallback, iChannels, uiSamplesPerSec, uiBitsPerSample, bResample, strAudioCodec, bIsMusic, bPassthrough); return audioSink; }
IAudioRenderer* CAudioRendererFactory::CreateAudioRenderer(IAudioCallback* pCallback, int iChannels, enum PCMChannels* channelMap, unsigned int uiSamplesPerSec, unsigned int uiBitsPerSample, bool bResample, const char* strAudioCodec, bool bIsMusic, bool bPassthrough, bool bTimed, AudioMediaFormat audioMediaFormat) { IAudioRenderer* audioSink = NULL; /* in case none in the first pass was able to be created, fall back to os specific */ #ifdef WIN32 /* if (bPassthrough) { audioSink = new CWin32WASAPI(); ReturnOnValidInitialize(); } else {*/ audioSink = new CWin32DirectSound(); ReturnOnValidInitialize(); #elif defined(__APPLE__) audioSink = new CCoreAudioRenderer(); ReturnOnValidInitialize(); #elif defined(HAS_INTEL_SMD) audioSink = new CIntelSMDAudioRenderer(); ReturnOnValidInitialize(); #elif defined(HAS_ALSA) int requestedLibrary = g_guiSettings.GetInt("audiooutput.library"); if (requestedLibrary == AUDIO_LIBRARY_ALSA) { audioSink = new CALSADirectSound(); ReturnOnValidInitialize(); } #endif audioSink = new CNullDirectSound(); audioSink->Initialize(pCallback, iChannels, channelMap, uiSamplesPerSec, uiBitsPerSample, bResample, strAudioCodec, bIsMusic, bPassthrough, bTimed, audioMediaFormat); return audioSink; }