From 140730d9e27dce0185249fc8881330968aa3dc89 Mon Sep 17 00:00:00 2001
From: Vincent Lucas <chenzo@jitsi.org>
Date: Mon, 24 Dec 2012 10:59:08 +0000
Subject: [PATCH] Corrects PortAudio not running on Linux: checks if CoreAudio
 is supported for the current system.

---
 src/org/jitsi/impl/neomedia/CoreAudioDevice.java     | 12 ++++++++++++
 .../jitsi/impl/neomedia/device/PortAudioSystem.java  | 12 ++++++++----
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/src/org/jitsi/impl/neomedia/CoreAudioDevice.java b/src/org/jitsi/impl/neomedia/CoreAudioDevice.java
index 4c152927..a96757e3 100644
--- a/src/org/jitsi/impl/neomedia/CoreAudioDevice.java
+++ b/src/org/jitsi/impl/neomedia/CoreAudioDevice.java
@@ -15,20 +15,32 @@
  */
 public class CoreAudioDevice
 {
+    /**
+     * Loads CoreAudioDevice if we are using MacOsX or Windows Vista/7/8.
+     */
     static
     {
+        isLoaded = false;
         if(OSUtils.IS_MAC)
         {
             System.loadLibrary("jnmaccoreaudio");
+            isLoaded = true;
         }
         else if(OSUtils.IS_WINDOWS_VISTA
                 || OSUtils.IS_WINDOWS_7
                 || OSUtils.IS_WINDOWS_8)
         {
             System.loadLibrary("jnwincoreaudio");
+            isLoaded = true;
         }
     }
 
+    /**
+     * Tells if the CoreAudio library used by this CoreAudioDevice is correctly
+     * loaded: if we are under a supported operating system.
+     */
+    public static boolean isLoaded;
+
     public static native int initDevices();
 
     public static native void freeDevices();
diff --git a/src/org/jitsi/impl/neomedia/device/PortAudioSystem.java b/src/org/jitsi/impl/neomedia/device/PortAudioSystem.java
index 104bf1b1..d0abdc65 100644
--- a/src/org/jitsi/impl/neomedia/device/PortAudioSystem.java
+++ b/src/org/jitsi/impl/neomedia/device/PortAudioSystem.java
@@ -264,7 +264,8 @@ protected void doInitialize()
             = new LinkedList<ExtendedCaptureDeviceInfo>();
         final boolean loggerIsDebugEnabled = logger.isDebugEnabled();
 
-        CoreAudioDevice.initDevices();
+        if(CoreAudioDevice.isLoaded)
+            CoreAudioDevice.initDevices();
         for (int deviceIndex = 0; deviceIndex < deviceCount; deviceIndex++)
         {
             long deviceInfo = Pa.GetDeviceInfo(deviceIndex);
@@ -281,8 +282,10 @@ protected void doInitialize()
                 = Pa.DeviceInfo_getTransportType(deviceInfo);
             String deviceUID
                 = Pa.DeviceInfo_getDeviceUID(deviceInfo);
-            String modelIdentifier
-                = CoreAudioDevice.getDeviceModelIdentifier(deviceUID);
+            String modelIdentifier = null;
+            if(CoreAudioDevice.isLoaded)
+                modelIdentifier
+                    = CoreAudioDevice.getDeviceModelIdentifier(deviceUID);
 
             /*
              * TODO The intention of reinitialize() was to perform the
@@ -398,7 +401,8 @@ else if (maxOutputChannels > 0)
                 }
             }
         }
-        CoreAudioDevice.freeDevices();
+        if(CoreAudioDevice.isLoaded)
+            CoreAudioDevice.freeDevices();
 
         /*
          * Make sure that devices which support both capture and playback are
-- 
GitLab