modules/media/src/main/java/com/sun/media/jfxmediaimpl/NativeMediaManager.java
Print this page
rev 7591 : RT-38074: [macosx] Separate QTKit platform code from core media code so it can be removed for MAS
Reviewed-by:
*** 31,40 ****
--- 31,41 ----
import com.sun.media.jfxmedia.locator.Locator;
import com.sun.media.jfxmedia.logging.Logger;
import com.sun.media.jfxmediaimpl.platform.PlatformManager;
import java.lang.ref.WeakReference;
import java.security.AccessController;
+ import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
*** 43,109 ****
/**
* A class representing a native media engine.
*/
public class NativeMediaManager {
/**
- * The NativeMediaManager singleton.
- */
- // If we create NativeMediaManager here we will not be able to catch exception from constructor.
- private static NativeMediaManager theInstance = null;
- /**
* Whether the native layer has been initialized.
*/
private static boolean isNativeLayerInitialized = false;
/**
* The {@link MediaErrorListener}s.
*/
// FIXME: Change to WeakHashMap<MediaErrorListener,Boolean> as it's more efficient
! private List<WeakReference<MediaErrorListener>> errorListeners =
! new ArrayList<WeakReference<MediaErrorListener>>();
! private static NativeMediaPlayerDisposer playerDisposer = new NativeMediaPlayerDisposer();
/**
* List of all un-disposed players.
*/
! private static Map<MediaPlayer,Boolean> allMediaPlayers =
! new WeakHashMap<MediaPlayer,Boolean>();
// cached content types, so we don't have to poll and sort each time, this list
// should never change once we're initialized
private final List<String> supportedContentTypes =
! new ArrayList<String>();
/**
* Get the default
* <code>NativeMediaManager</code>.
*
* @return the singleton
* <code>NativeMediaManager</code> instance.
*/
! public static synchronized NativeMediaManager getDefaultInstance() {
! if (theInstance == null) {
! theInstance = new NativeMediaManager();
! }
! return theInstance;
}
//**************************************************************************
//***** Constructors
//**************************************************************************
/**
* Create a <code>NativeMediaManager</code>.
*/
! protected NativeMediaManager() {}
!
! /**
! * Initialize the native layer if it has not been so already.
*/
- synchronized static void initNativeLayer() {
- if (!isNativeLayerInitialized) {
- // preload platforms
- PlatformManager.getManager().preloadPlatforms();
-
- // Load native libraries.
try {
AccessController.doPrivileged((PrivilegedExceptionAction) () -> {
if (HostUtils.isWindows() || HostUtils.isMacOSX()) {
NativeLibLoader.loadLibrary("glib-lite");
}
--- 44,107 ----
/**
* A class representing a native media engine.
*/
public class NativeMediaManager {
/**
* Whether the native layer has been initialized.
*/
private static boolean isNativeLayerInitialized = false;
/**
* The {@link MediaErrorListener}s.
*/
// FIXME: Change to WeakHashMap<MediaErrorListener,Boolean> as it's more efficient
! private final List<WeakReference<MediaErrorListener>> errorListeners =
! new ArrayList();
! private final static NativeMediaPlayerDisposer playerDisposer =
! new NativeMediaPlayerDisposer();
/**
* List of all un-disposed players.
*/
! private final static Map<MediaPlayer,Boolean> allMediaPlayers =
! new WeakHashMap();
// cached content types, so we don't have to poll and sort each time, this list
// should never change once we're initialized
private final List<String> supportedContentTypes =
! new ArrayList();
!
! /**
! * The NativeMediaManager singleton.
! */
! private static class NativeMediaManagerInitializer {
! private static final NativeMediaManager globalInstance
! = new NativeMediaManager();
! }
/**
* Get the default
* <code>NativeMediaManager</code>.
*
* @return the singleton
* <code>NativeMediaManager</code> instance.
*/
! public static NativeMediaManager getDefaultInstance() {
! return NativeMediaManagerInitializer.globalInstance;
}
//**************************************************************************
//***** Constructors
//**************************************************************************
/**
* Create a <code>NativeMediaManager</code>.
*/
! protected NativeMediaManager() {
! /*
! * Load native libraries. This must be done early as platforms may need
! * to attempt loading their own native libs that are dependent on these
! * This is a slight performance hit, but necessary otherwise we could
! * erroneously report content types for platforms that cannot be loaded
*/
try {
AccessController.doPrivileged((PrivilegedExceptionAction) () -> {
if (HostUtils.isWindows() || HostUtils.isMacOSX()) {
NativeLibLoader.loadLibrary("glib-lite");
}
*** 113,135 ****
}
NativeLibLoader.loadLibrary("jfxmedia");
return null;
});
! } catch (Exception e) {
MediaUtils.error(null, MediaError.ERROR_MANAGER_ENGINEINIT_FAIL.code(),
! "Unable to load one or more dependent libraries.", e);
! return; // abort
}
// Get the Logger native side rolling before we load platforms
if (!Logger.initNative()) {
MediaUtils.error(null, MediaError.ERROR_MANAGER_LOGGER_INIT.code(),
"Unable to init logger", null);
! return; // abort
}
// load platforms
PlatformManager.getManager().loadPlatforms();
// Set the native initialization flag, even if initialization failed.
isNativeLayerInitialized = true;
--- 111,137 ----
}
NativeLibLoader.loadLibrary("jfxmedia");
return null;
});
! } catch (PrivilegedActionException pae) {
MediaUtils.error(null, MediaError.ERROR_MANAGER_ENGINEINIT_FAIL.code(),
! "Unable to load one or more dependent libraries.", pae);
}
// Get the Logger native side rolling before we load platforms
if (!Logger.initNative()) {
MediaUtils.error(null, MediaError.ERROR_MANAGER_LOGGER_INIT.code(),
"Unable to init logger", null);
! }
}
+ /**
+ * Initialize the native layer if it has not been so already.
+ */
+ synchronized static void initNativeLayer() {
+ if (!isNativeLayerInitialized) {
// load platforms
PlatformManager.getManager().loadPlatforms();
// Set the native initialization flag, even if initialization failed.
isNativeLayerInitialized = true;