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