JOGL v2.6.0-rc-20250712
JOGL, High-Performance Graphics Binding for Java™ (public API).
GLMediaPlayerFactory.java
Go to the documentation of this file.
1/**
2 * Copyright 2012 JogAmp Community. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without modification, are
5 * permitted provided that the following conditions are met:
6 *
7 * 1. Redistributions of source code must retain the above copyright notice, this list of
8 * conditions and the following disclaimer.
9 *
10 * 2. Redistributions in binary form must reproduce the above copyright notice, this list
11 * of conditions and the following disclaimer in the documentation and/or other materials
12 * provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
15 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
16 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
21 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
22 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 *
24 * The views and conclusions contained in the software and documentation are those of the
25 * authors and should not be interpreted as representing official policies, either expressed
26 * or implied, of JogAmp Community.
27 */
28package com.jogamp.opengl.util.av;
29
30import jogamp.opengl.util.av.NullGLMediaPlayer;
31
32import com.jogamp.common.JogampRuntimeException;
33import com.jogamp.common.util.ReflectionUtil;
34
36 private static final String AndroidGLMediaPlayerAPI14ClazzName = "jogamp.opengl.android.av.AndroidGLMediaPlayerAPI14";
37 private static final String FFMPEGMediaPlayerClazzName = "jogamp.opengl.util.av.impl.FFMPEGMediaPlayer";
38 private static final String OMXGLMediaPlayerClazzName = "jogamp.opengl.util.av.impl.OMXGLMediaPlayer";
39 private static final String isAvailableMethodName = "isAvailable";
40
41 public static GLMediaPlayer createDefault() {
42 final ClassLoader cl = GLMediaPlayerFactory.class.getClassLoader();
43 GLMediaPlayer sink = create(cl, OMXGLMediaPlayerClazzName);
44 if( null == sink ) {
45 sink = create(cl, AndroidGLMediaPlayerAPI14ClazzName);
46 }
47 if( null == sink ) {
48 sink = create(cl, FFMPEGMediaPlayerClazzName);
49 }
50 if( null == sink ) {
51 sink = createNull();
52 }
53 return sink;
54 }
55 public static GLMediaPlayer createNull() {
56 if(GLMediaPlayer.DEBUG) { System.err.println("GLMediaPlayerFactory: Using NullGLMediaPlayer"); }
57 return new NullGLMediaPlayer();
58 }
59
60 public static GLMediaPlayer create(final ClassLoader cl, final String implName) {
61 try {
62 if(GLMediaPlayer.DEBUG) { System.err.println("GLMediaPlayerFactory: Trying: "+implName); }
63 if(((Boolean)ReflectionUtil.callStaticMethod(implName, isAvailableMethodName, null, null, cl)).booleanValue()) {
64 final GLMediaPlayer res = (GLMediaPlayer) ReflectionUtil.createInstance(implName, cl);
65 if(GLMediaPlayer.DEBUG) { System.err.println("GLMediaPlayerFactory: Using: "+implName); }
66 return res;
67 } else {
68 if(GLMediaPlayer.DEBUG) { System.err.println("GLMediaPlayerFactory: Not available: "+implName); }
69 }
70 } catch (final JogampRuntimeException jre) {
72 final Throwable cause = jre.getCause();
73 System.err.println("GLMediaPlayerFactory: Not available: "+implName);
74 System.err.println("Caught cause "+cause.getClass().getName()+": "+cause.getMessage());
75 }
76 } catch (final Throwable t) {
78 System.err.println("GLMediaPlayerFactory: Not available: "+implName);
79 System.err.println("Caught "+t.getClass().getName()+": "+t.getMessage()); t.printStackTrace();
80 }
81 }
82 return null;
83 }
84}
static GLMediaPlayer create(final ClassLoader cl, final String implName)
GLMediaPlayer interface specifies a TextureSequence state machine using a multiplexed audio/video str...