diff options
author | Sven Gothel <[email protected]> | 2012-04-06 03:56:18 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2012-04-06 03:56:18 +0200 |
commit | 9bb8fe7c2baff185a62cf4806cfa34dfad4f7a4c (patch) | |
tree | 021d9139845ff9f91c5d8fa8e5354a8d30d67182 /src/jogl/classes/jogamp | |
parent | 7c78d722afab67a90bf92cdd29244398d1f3e5cd (diff) |
GLMediaPlayer: Add (c) tag; Add NullGLMediaPlayer (dummy texture);
- Factory falls back to NullGLMediaPlayer allowing to test on platforms where no player is available.
- MovieSimple (c) to JogAmp since it is no more derived from the old project.
Diffstat (limited to 'src/jogl/classes/jogamp')
4 files changed, 249 insertions, 3 deletions
diff --git a/src/jogl/classes/jogamp/opengl/android/av/AndroidGLMediaPlayerAPI14.java b/src/jogl/classes/jogamp/opengl/android/av/AndroidGLMediaPlayerAPI14.java index 4325dd8ee..7e94d3cc5 100644 --- a/src/jogl/classes/jogamp/opengl/android/av/AndroidGLMediaPlayerAPI14.java +++ b/src/jogl/classes/jogamp/opengl/android/av/AndroidGLMediaPlayerAPI14.java @@ -1,3 +1,30 @@ +/** + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ package jogamp.opengl.android.av; import java.io.IOException; @@ -187,7 +214,7 @@ public class AndroidGLMediaPlayerAPI14 extends GLMediaPlayerImpl { } @Override - protected AndroidTextureFrame createTexImage(GLContext ctx, int idx, int[] tex) { + protected TextureFrame createTexImage(GLContext ctx, int idx, int[] tex) { final Texture texture = super.createTexImageImpl(ctx, idx, tex, true); final SurfaceTexture stex = new SurfaceTexture(tex[idx]); diff --git a/src/jogl/classes/jogamp/opengl/av/EGLMediaPlayerImpl.java b/src/jogl/classes/jogamp/opengl/av/EGLMediaPlayerImpl.java index ef3d5072c..abc5d5912 100644 --- a/src/jogl/classes/jogamp/opengl/av/EGLMediaPlayerImpl.java +++ b/src/jogl/classes/jogamp/opengl/av/EGLMediaPlayerImpl.java @@ -1,3 +1,30 @@ +/** + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ package jogamp.opengl.av; import javax.media.opengl.GLContext; diff --git a/src/jogl/classes/jogamp/opengl/av/GLMediaPlayerImpl.java b/src/jogl/classes/jogamp/opengl/av/GLMediaPlayerImpl.java index 93b56e316..df4cc7625 100644 --- a/src/jogl/classes/jogamp/opengl/av/GLMediaPlayerImpl.java +++ b/src/jogl/classes/jogamp/opengl/av/GLMediaPlayerImpl.java @@ -1,3 +1,30 @@ +/** + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ package jogamp.opengl.av; import java.io.IOException; @@ -137,7 +164,7 @@ public abstract class GLMediaPlayerImpl implements GLMediaPlayer { @Override public final State initStream(URLConnection urlConn) throws IllegalStateException, IOException { if(State.UninitializedStream != state) { - throw new IllegalStateException("Instance not in state "+State.UninitializedStream+", but "+state); + throw new IllegalStateException("Instance not in state "+State.UninitializedStream+", but "+state+", "+this); } this.urlConn = urlConn; if (this.urlConn != null) { @@ -162,7 +189,7 @@ public abstract class GLMediaPlayerImpl implements GLMediaPlayer { @Override public final State initGL(GL gl) throws IllegalStateException, GLException { if(State.UninitializedGL != state) { - throw new IllegalStateException("Instance not in state "+State.UninitializedGL+", but "+state); + throw new IllegalStateException("Instance not in state "+State.UninitializedGL+", but "+state+", "+this); } final GLContext ctx = gl.getContext(); if(!ctx.isCurrent()) { diff --git a/src/jogl/classes/jogamp/opengl/av/NullGLMediaPlayer.java b/src/jogl/classes/jogamp/opengl/av/NullGLMediaPlayer.java new file mode 100644 index 000000000..5da135499 --- /dev/null +++ b/src/jogl/classes/jogamp/opengl/av/NullGLMediaPlayer.java @@ -0,0 +1,165 @@ +/** + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ +package jogamp.opengl.av; + +import java.io.IOException; +import java.net.URLConnection; + +import javax.media.opengl.GL; +import javax.media.opengl.GLContext; +import javax.media.opengl.GLProfile; + +import jogamp.opengl.av.GLMediaPlayerImpl; + +import com.jogamp.common.util.IOUtil; +import com.jogamp.opengl.util.texture.Texture; +import com.jogamp.opengl.util.texture.TextureData; +import com.jogamp.opengl.util.texture.TextureIO; + +/*** + * A dummy null media player implementation using a static test frame (if available). + */ +public class NullGLMediaPlayer extends GLMediaPlayerImpl { + private TextureData texData = null; + private TextureFrame frame = null; + private long pos_ms = 0; + private long pos_start = 0; + + public NullGLMediaPlayer() { + super(); + this.setTextureCount(1); + } + + @Override + public void setPlaySpeed(float rate) { + // n/a + } + + @Override + public float getPlaySpeed() { + return 0; + } + + @Override + protected boolean startImpl() { + pos_start = System.currentTimeMillis(); + return true; + } + + @Override + protected boolean pauseImpl() { + return true; + } + + @Override + protected boolean stopImpl() { + return true; + } + + @Override + protected long seekImpl(long msec) { + pos_ms = msec; + validatePos(); + return pos_ms; + } + + @Override + public TextureFrame getLastTexture() { + return frame; + } + + @Override + public TextureFrame getNextTexture() { + return frame; + } + + @Override + public long getCurrentPosition() { + pos_ms = System.currentTimeMillis() - pos_start; + validatePos(); + return pos_ms; + } + + @Override + protected void destroyImpl(GL gl) { + } + + @Override + protected void initStreamImplPreGL() throws IOException { + try { + URLConnection urlConn = IOUtil.getResource("data/av/test-ntsc01-640x360.tga", NullGLMediaPlayer.class.getClassLoader()); + if(null != urlConn) { + texData = TextureIO.newTextureData(GLProfile.getGL2ES2(), urlConn.getInputStream(), false, "tga"); + } + } catch (Exception e) { + e.printStackTrace(); + } + if(null != texData) { + width = texData.getWidth(); + height = texData.getHeight(); + } else { + width = 640; + height = 480; + } + fps = 30; + bps = 0; + totalFrames = 0; + duration = 10*60*1000; + acodec = "none"; + vcodec = "tga-dummy"; + } + + @Override + protected void destroyTexImage(GLContext ctx, TextureFrame imgTex) { + super.destroyTexImage(ctx, imgTex); + } + + @Override + protected TextureFrame createTexImage(GLContext ctx, int idx, int[] tex) { + Texture texture = super.createTexImageImpl(ctx, idx, tex, true); + if(null != texData) { + texture.updateImage(ctx.getGL(), texData); + } + frame = new TextureFrame( texture ); + return frame; + } + + private void validatePos() { + boolean considerPausing = false; + if( 0 > pos_ms) { + pos_ms = 0; + considerPausing = true; + } else if ( pos_ms > getDuration() ) { + pos_ms = getDuration(); + considerPausing = true; + } + if(considerPausing && state == State.Playing) { + state = State.Paused; + } + } +} |