modules/media/src/main/java/com/sun/media/jfxmediaimpl/platform/osx/OSXPlatform.java

Print this page
rev 7587 : RT-38074: [macosx] Separate QTKit platform code from core media code so it can be removed for MAS
Reviewed-by:

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.  Oracle designates this

@@ -23,16 +23,19 @@
  * questions.
  */
 
 package com.sun.media.jfxmediaimpl.platform.osx;
 
+import com.sun.glass.utils.NativeLibLoader;
 import com.sun.media.jfxmedia.Media;
 import com.sun.media.jfxmedia.MediaPlayer;
 import com.sun.media.jfxmedia.locator.Locator;
 import com.sun.media.jfxmedia.logging.Logger;
 import com.sun.media.jfxmediaimpl.HostUtils;
 import com.sun.media.jfxmediaimpl.platform.Platform;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 
 /**
  * Mac OS X Platform implementation.
  */
 public final class OSXPlatform extends Platform {

@@ -46,37 +49,58 @@
         "application/vnd.apple.mpegurl",
         "audio/mpegurl"
     };
 
     private static final class OSXPlatformInitializer {
-        private static final OSXPlatform globalInstance = new OSXPlatform();
+        private static final OSXPlatform globalInstance;
+        static {
+            // Platform is only available if we can load it's native lib
+            // Do this early so we can report the correct content types
+            boolean isLoaded = false;
+            try {
+                isLoaded = AccessController.doPrivileged((PrivilegedAction<Boolean>) () -> {
+                    try {
+                        NativeLibLoader.loadLibrary("jfxmedia_qtkit");
+                    } catch (UnsatisfiedLinkError ule) {
+                        // non-fatal condition, keep quiet about it
+                        return Boolean.FALSE;
+                    }
+                    return Boolean.TRUE;
+                });
+            } catch (Exception e) {
+                // Ignore
+            }
+            if (isLoaded) {
+                globalInstance = new OSXPlatform();
+            } else {
+                globalInstance = null;
+            }
+        }
     }
 
     public static Platform getPlatformInstance() {
         return OSXPlatformInitializer.globalInstance;
     }
 
     private OSXPlatform() {
     }
 
-    @Override
-    public void preloadPlatform() {}
-
     /**
      * @return false if the platform cannot be loaded
      */
     @Override
     public boolean loadPlatform() {
         if (!HostUtils.isMacOSX()) {
             return false;
         }
 
+        // ULE should not happen here, but just in case
         try {
             osxPlatformInit();
         } catch (UnsatisfiedLinkError ule) {
             if (Logger.canLog(Logger.DEBUG)) {
-                Logger.logMsg(Logger.DEBUG, "Unable to load OSX platform.");
+                Logger.logMsg(Logger.DEBUG, "QTKit platform lib is not available.");
             }
 //            MediaUtils.nativeError(OSXPlatform.class, MediaError.ERROR_MANAGER_ENGINEINIT_FAIL);
             return false;
         }
         return true;