diff --git a/daemon/configure.ac b/daemon/configure.ac index 601cdfb191166f72c8bf0f834bdbb6a40de39c32..0d8f075423e63d60892c2cfc9371533557d61bb9 100644 --- a/daemon/configure.ac +++ b/daemon/configure.ac @@ -91,6 +91,11 @@ AM_CONDITIONAL(HAVE_WIN32, test "${SYS}" = "mingw32") AM_CONDITIONAL(HAVE_WIN64, test "${HAVE_WIN64}" = "1") AM_CONDITIONAL(HAVE_OSX, test "${HAVE_OSX}" = "1") +dnl FIXME this should be deduced automatically +AC_DEFINE_UNQUOTED([HAVE_COREAUDIO], + `if test "${HAVE_OSX}" = "1"; then echo 1; else echo 0; fi`, + [Define if you have CoreAudio]) + dnl Android is linux, but a bit different AS_IF([test "$SYS" = linux],[ AC_MSG_CHECKING([for an Android system]) diff --git a/daemon/src/audio/audiolayer.h b/daemon/src/audio/audiolayer.h index ec6bd334d3ff0e20d72ead73e82bb12b36ab3ae8..6908c0604f2198342981c6daa9e003d7ec96ce47 100644 --- a/daemon/src/audio/audiolayer.h +++ b/daemon/src/audio/audiolayer.h @@ -52,6 +52,7 @@ #define PULSEAUDIO_API_STR "pulseaudio" #define ALSA_API_STR "alsa" #define JACK_API_STR "jack" +#define COREAUDIO_API_STR "coreaudio" #define PCM_DEFAULT "default" // Default ALSA plugin #define PCM_DSNOOP "plug:dsnoop" // Alsa plugin for microphone sharing diff --git a/daemon/src/audio/coreaudio/corelayer.cpp b/daemon/src/audio/coreaudio/corelayer.cpp index 566c6e6a240c7b49d50504b56934d96d8050bde1..1bfed13718ac7371ee7acdbb7965c3a8848f438b 100644 --- a/daemon/src/audio/coreaudio/corelayer.cpp +++ b/daemon/src/audio/coreaudio/corelayer.cpp @@ -122,6 +122,17 @@ void CoreLayer::startStream() return; } + +int CoreLayer::getAudioDeviceIndex(const std::string& name, DeviceType type) const +{ + return 0; +} + +std::string CoreLayer::getAudioDeviceName(int index, DeviceType type) const +{ + return ""; +} + void CoreLayer::stopStream() { isStarted_ = false; diff --git a/daemon/src/audio/coreaudio/corelayer.h b/daemon/src/audio/coreaudio/corelayer.h index b095af5fbf4898f1cc7b508f1615dfb1f4bdc2a5..87d2374c21d2b0525d526b11c21f421e4f27f4cb 100644 --- a/daemon/src/audio/coreaudio/corelayer.h +++ b/daemon/src/audio/coreaudio/corelayer.h @@ -56,6 +56,9 @@ class CoreLayer : public AudioLayer { virtual std::vector<std::string> getCaptureDeviceList() const; virtual std::vector<std::string> getPlaybackDeviceList() const; + virtual int getAudioDeviceIndex(const std::string& name, DeviceType type) const; + virtual std::string getAudioDeviceName(int index, DeviceType type) const; + /** * Get the index of the audio card for capture * @return int The index of the card used for capture diff --git a/daemon/src/preferences.cpp b/daemon/src/preferences.cpp index e9be3eb72456a5d89bafb0c69d0c52362cf45beb..28ec334ae70a1a8914692036ecfff5d750604cda 100644 --- a/daemon/src/preferences.cpp +++ b/daemon/src/preferences.cpp @@ -47,6 +47,9 @@ #if HAVE_PULSE #include "audio/pulseaudio/pulselayer.h" #endif +#if HAVE_COREAUDIO +#include "audio/coreaudio/corelayer.h" +#endif #endif /* HAVE_OPENSL */ #include <yaml-cpp/yaml.h> @@ -380,6 +383,15 @@ sfl::AudioLayer* AudioPreference::createAudioLayer() checkSoundCard(alsaCardring_, sfl::DeviceType::RINGTONE); return new sfl::AlsaLayer(*this); +#endif + +#if HAVE_COREAUDIO + audioApi_ = COREAUDIO_API_STR; + try { + return new sfl::CoreLayer(*this); + } catch (const std::runtime_error &e) { + SFL_WARN("Could not create coreaudio layer. There will be no sound."); + } #else return NULL; #endif