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;