From 54317908fbe53ed8c94cc16a74b9e39b952f22fc Mon Sep 17 00:00:00 2001 From: Philippe Groarke <philippe.groarke@savoirfairelinux.com> Date: Thu, 23 Oct 2014 14:38:30 -0400 Subject: [PATCH] OSX: CoreAudio preliminairies Refs #57972 Change-Id: Ic595914e590c335f9dfbb968839166dd6b0c568c --- daemon/configure.ac | 5 +++++ daemon/src/audio/audiolayer.h | 1 + daemon/src/audio/coreaudio/corelayer.cpp | 11 +++++++++++ daemon/src/audio/coreaudio/corelayer.h | 3 +++ daemon/src/preferences.cpp | 12 ++++++++++++ 5 files changed, 32 insertions(+) diff --git a/daemon/configure.ac b/daemon/configure.ac index 601cdfb191..0d8f075423 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 ec6bd334d3..6908c0604f 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 566c6e6a24..1bfed13718 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 b095af5fbf..87d2374c21 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 e9be3eb724..28ec334ae7 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 -- GitLab