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;
}
Пример #2
0
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;
}