diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/demos/es1/cube/Cube.java | 6 | ||||
-rw-r--r-- | src/demos/es2/openmax/Cube.java | 366 | ||||
-rwxr-xr-x | src/demos/es2/openmax/MovieCube.java | 199 | ||||
-rwxr-xr-x | src/demos/es2/openmax/MovieSimple.java | 52 |
4 files changed, 607 insertions, 16 deletions
diff --git a/src/demos/es1/cube/Cube.java b/src/demos/es1/cube/Cube.java index 7db30b2..b77c4e9 100644 --- a/src/demos/es1/cube/Cube.java +++ b/src/demos/es1/cube/Cube.java @@ -180,10 +180,6 @@ public class Cube implements GLEventListener { public void display(GLAutoDrawable drawable) { GL gl = drawable.getGL(); - GL2ES1 glF=null; - if(gl.isGL2ES1()) { - glF = drawable.getGL().getGL2ES1(); - } gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT); @@ -195,8 +191,6 @@ public class Cube implements GLEventListener { gl.glRotatef((float)(time * 22.311f), -0.1f, 0.0f, -5.0f); gl.glDrawElements(gl.GL_TRIANGLES, 6 * 6, gl.GL_UNSIGNED_BYTE, cubeIndices); - // gl.glFinish(); - // System.err.println(gl); time += 0.01f; } diff --git a/src/demos/es2/openmax/Cube.java b/src/demos/es2/openmax/Cube.java new file mode 100644 index 0000000..1430978 --- /dev/null +++ b/src/demos/es2/openmax/Cube.java @@ -0,0 +1,366 @@ +/* + * + * Copyright (c) 2007, Sun Microsystems, Inc. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Sun Microsystems nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "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 THE COPYRIGHT OWNER 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. + */ +package demos.es2.openmax; + +import javax.media.opengl.*; +import javax.media.opengl.util.*; +import javax.media.opengl.glu.*; +import java.nio.*; + +import com.sun.javafx.newt.*; + +public class Cube implements GLEventListener { + public Cube () { + this(false, false); + } + + public Cube (boolean useTexCoords, boolean innerCube) { + this.innerCube = innerCube; + + // Initialize data Buffers + this.cubeVertices = BufferUtil.newShortBuffer(s_cubeVertices.length); + cubeVertices.put(s_cubeVertices); + cubeVertices.flip(); + + this.cubeColors = BufferUtil.newFloatBuffer(s_cubeColors.length); + cubeColors.put(s_cubeColors); + cubeColors.flip(); + + this.cubeNormals = BufferUtil.newByteBuffer(s_cubeNormals.length); + cubeNormals.put(s_cubeNormals); + cubeNormals.flip(); + + this.cubeIndices = BufferUtil.newByteBuffer(s_cubeIndices.length); + cubeIndices.put(s_cubeIndices); + cubeIndices.flip(); + + if (useTexCoords) { + float aspect = 16.0f/9.0f; + float ss=1f, ts=1f; // scale tex-coord + + ss = 1f/aspect; // b > h, crop width + for(int i=0; i<s_cubeTexCoords.length; i++) { + if(s_cubeTexCoords[i]>0) { + if ( (i+1) % 2 == 0 ) { + // y + s_cubeTexCoords[i] *= ts; + } else { + // x + s_cubeTexCoords[i] *= ss; + } + } + } + + this.cubeTexCoords = BufferUtil.newFloatBuffer(s_cubeTexCoords.length); + cubeTexCoords.put(s_cubeTexCoords); + cubeTexCoords.flip(); + } + } + + public void init(GLAutoDrawable drawable) { + GL gl = drawable.getGL(); + glu = GLU.createGLU(); + if(gl.isGLES2()) { + gl.getGLES2().enableFixedFunctionEmulationMode(GLES2.FIXED_EMULATION_VERTEXCOLORTEXTURE); + System.err.println("Cubes Fixed emu: FIXED_EMULATION_VERTEXCOLORTEXTURE"); + } + + gl.glGenBuffers(4, vboNames, 0); + + if(!innerCube) { + System.err.println("Entering initialization"); + System.err.println("GL Profile: "+GLProfile.getProfile()); + System.err.println("GL:" + gl); + System.err.println("GL_VERSION=" + gl.glGetString(gl.GL_VERSION)); + System.err.println("GL_EXTENSIONS:"); + System.err.println(" " + gl.glGetString(gl.GL_EXTENSIONS)); + } + } + + public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { + float aspect = (height != 0) ? ((float)width / (float)height) : 1.0f; + + GL gl = drawable.getGL(); + GL2ES1 glF=null; + if(gl.isGL2ES1()) { + glF = drawable.getGL().getGL2ES1(); + } + + gl.glViewport(0, 0, width, height); + + gl.glMatrixMode(gl.GL_MODELVIEW); + gl.glLoadIdentity(); + + // JAU gl.glScissor(0, 0, width, height); + if(innerCube) { + // Clear background to white + gl.glClearColor(1.0f, 1.0f, 1.0f, 0.4f); + } else { + // Clear background to blue + gl.glClearColor(0.0f, 0.0f, 1.0f, 1.0f); + } + + if(!innerCube) { + gl.glLightfv(gl.GL_LIGHT0, gl.GL_POSITION, light_position, 0); + gl.glLightfv(gl.GL_LIGHT0, gl.GL_AMBIENT, light_ambient, 0); + gl.glLightfv(gl.GL_LIGHT0, gl.GL_DIFFUSE, light_diffuse, 0); + gl.glLightfv(gl.GL_LIGHT0, gl.GL_SPECULAR, zero_vec4, 0); + gl.glMaterialfv(gl.GL_FRONT_AND_BACK, gl.GL_SPECULAR, material_spec, 0); + + gl.glEnable(gl.GL_LIGHTING); + gl.glEnable(gl.GL_LIGHT0); + gl.glEnable(gl.GL_COLOR_MATERIAL); + } else { + gl.glDisable(gl.GL_LIGHTING); + gl.glDisable(gl.GL_LIGHT0); + } + gl.glEnable(gl.GL_CULL_FACE); + if(null!=glF) { + gl.glEnable(gl.GL_NORMALIZE); + + gl.glShadeModel(gl.GL_SMOOTH); + gl.glDisable(gl.GL_DITHER); + } + + gl.glEnableClientState(gl.GL_VERTEX_ARRAY); + gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vboNames[0]); + gl.glBufferData(GL.GL_ARRAY_BUFFER, cubeVertices.limit() * BufferUtil.SIZEOF_SHORT, cubeVertices, GL.GL_STATIC_DRAW); + gl.glVertexPointer(3, gl.GL_SHORT, 0, 0); + + gl.glEnableClientState(gl.GL_NORMAL_ARRAY); + gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vboNames[1]); + gl.glBufferData(GL.GL_ARRAY_BUFFER, cubeNormals.limit() * BufferUtil.SIZEOF_BYTE, cubeNormals, GL.GL_STATIC_DRAW); + gl.glNormalPointer(gl.GL_BYTE, 0, 0); + + if (cubeColors != null) { + gl.glEnableClientState(gl.GL_COLOR_ARRAY); + gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vboNames[2]); + gl.glBufferData(GL.GL_ARRAY_BUFFER, cubeColors.limit() * BufferUtil.SIZEOF_FLOAT, cubeColors, GL.GL_STATIC_DRAW); + gl.glColorPointer(4, gl.GL_FLOAT, 0, 0); + } + + if (cubeTexCoords != null) { + gl.glEnableClientState(gl.GL_TEXTURE_COORD_ARRAY); + gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vboNames[3]); + gl.glBufferData(GL.GL_ARRAY_BUFFER, cubeTexCoords.limit() * BufferUtil.SIZEOF_FLOAT, cubeTexCoords, GL.GL_STATIC_DRAW); + gl.glTexCoordPointer(2, gl.GL_FLOAT, 0, 0); + if(null!=glF) { + glF.glTexEnvi(glF.GL_TEXTURE_ENV, glF.GL_TEXTURE_ENV_MODE, glF.GL_INCR); + } + } else { + gl.glDisableClientState(gl.GL_TEXTURE_COORD_ARRAY); + } + gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0); + + if(null!=glF) { + glF.glHint(glF.GL_PERSPECTIVE_CORRECTION_HINT, glF.GL_FASTEST); + } + + gl.glMatrixMode(gl.GL_PROJECTION); + gl.glLoadIdentity(); + + if(!innerCube) { + glu.gluPerspective(90.0f, aspect, 1.0f, 100.0f); + } else { + gl.glOrthof(-20.0f, 20.0f, -20.0f, 20.0f, 1.0f, 40.0f); + } + // weird effect ..: gl.glCullFace(gl.GL_FRONT); + } + + public void display(GLAutoDrawable drawable) { + GL gl = drawable.getGL(); + + gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT); + + gl.glMatrixMode(gl.GL_MODELVIEW); + gl.glLoadIdentity(); + + gl.glTranslatef(0.f, 0.f, -30.f); + gl.glRotatef((float)(time * 29.77f), 1.0f, 2.0f, 0.0f); + gl.glRotatef((float)(time * 22.311f), -0.1f, 0.0f, -5.0f); + + gl.glDrawElements(gl.GL_TRIANGLES, 6 * 6, gl.GL_UNSIGNED_BYTE, cubeIndices); + + time += 0.01f; + } + + public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) { + } + + static final float[] light_position = { -50.f, 50.f, 50.f, 0.f }; + static final float[] light_ambient = { 0.125f, 0.125f, 0.125f, 1.f }; + static final float[] light_diffuse = { 1.0f, 1.0f, 1.0f, 1.f }; + static final float[] material_spec = { 1.0f, 1.0f, 1.0f, 0.f }; + static final float[] zero_vec4 = { 0.0f, 0.0f, 0.0f, 0.f }; + + int[] vboNames = new int[4]; + boolean innerCube; + boolean initialized = false; + float time = 0.0f; + ShortBuffer cubeVertices; + FloatBuffer cubeTexCoords; + FloatBuffer cubeColors; + ByteBuffer cubeNormals; + ByteBuffer cubeIndices; + private GLU glu; + + private static final short[] s_cubeVertices = + { + -10, 10, 10, 10, -10, 10, 10, 10, 10, -10, -10, 10, + + -10, 10, -10, 10, -10, -10, 10, 10, -10, -10, -10, -10, + + -10, -10, 10, 10, -10, -10, 10, -10, 10, -10, -10, -10, + + -10, 10, 10, 10, 10, -10, 10, 10, 10, -10, 10, -10, + + 10, -10, 10, 10, 10, -10, 10, 10, 10, 10, -10, -10, + + -10, -10, 10, -10, 10, -10, -10, 10, 10, -10, -10, -10 + }; + private static final float[] s_cubeTexCoords = + { + 0, 1f, 1f, 0, 1f, 1f, 0, 0, + + 0, 1f, 1f, 0, 1f, 1f, 0, 0, + + 0, 1f, 1f, 0, 1f, 1f, 0, 0, + + 0, 1f, 1f, 0, 1f, 1f, 0, 0, + + 0, 1f, 1f, 0, 1f, 1f, 0, 0, + + 0, 1f, 1f, 0, 1f, 1f, 0, 0, + }; + + private static final float[] s_cubeColors = + { + 40f/255f, 80f/255f, 160f/255f, 255f/255f, 40f/255f, 80f/255f, 160f/255f, 255f/255f, + 40f/255f, 80f/255f, 160f/255f, 255f/255f, 40f/255f, 80f/255f, 160f/255f, 255f/255f, + + 40f/255f, 80f/255f, 160f/255f, 255f/255f, 40f/255f, 80f/255f, 160f/255f, 255f/255f, + 40f/255f, 80f/255f, 160f/255f, 255f/255f, 40f/255f, 80f/255f, 160f/255f, 255f/255f, + + 128f/255f, 128f/255f, 128f/255f, 255f/255f, 128f/255f, 128f/255f, 128f/255f, 255f/255f, + 128f/255f, 128f/255f, 128f/255f, 255f/255f, 128f/255f, 128f/255f, 128f/255f, 255f/255f, + + 128f/255f, 128f/255f, 128f/255f, 255f/255f, 128f/255f, 128f/255f, 128f/255f, 255f/255f, + 128f/255f, 128f/255f, 128f/255f, 255f/255f, 128f/255f, 128f/255f, 128f/255f, 255f/255f, + + 255f/255f, 110f/255f, 10f/255f, 255f/255f, 255f/255f, 110f/255f, 10f/255f, 255f/255f, + 255f/255f, 110f/255f, 10f/255f, 255f/255f, 255f/255f, 110f/255f, 10f/255f, 255f/255f, + + 255f/255f, 70f/255f, 60f/255f, 255f/255f, 255f/255f, 70f/255f, 60f/255f, 255f/255f, + 255f/255f, 70f/255f, 60f/255f, 255f/255f, 255f/255f, 70f/255f, 60f/255f, 255 + }; + private static final byte[] s_cubeIndices = + { + 0, 3, 1, 2, 0, 1, /* front */ + 6, 5, 4, 5, 7, 4, /* back */ + 8, 11, 9, 10, 8, 9, /* top */ + 15, 12, 13, 12, 14, 13, /* bottom */ + 16, 19, 17, 18, 16, 17, /* right */ + 23, 20, 21, 20, 22, 21 /* left */ + }; + private static final byte[] s_cubeNormals = + { + 0, 0, 127, 0, 0, 127, 0, 0, 127, 0, 0, 127, + + 0, 0, -128, 0, 0, -128, 0, 0, -128, 0, 0, -128, + + 0, -128, 0, 0, -128, 0, 0, -128, 0, 0, -128, 0, + + 0, 127, 0, 0, 127, 0, 0, 127, 0, 0, 127, 0, + + 127, 0, 0, 127, 0, 0, 127, 0, 0, 127, 0, 0, + + -128, 0, 0, -128, 0, 0, -128, 0, 0, -128, 0, 0 + }; + + private void run(int type) { + int width = 800; + int height = 480; + System.err.println("Cube.run()"); + GLProfile.setProfileGLAny(); + try { + GLCapabilities caps = new GLCapabilities(); + // For emulation library, use 16 bpp + caps.setRedBits(5); + caps.setGreenBits(6); + caps.setBlueBits(5); + caps.setDepthBits(16); + + Window nWindow = null; + if(0!=(type&USE_AWT)) { + Display nDisplay = NewtFactory.createDisplay(NewtFactory.AWT, null); // local display + Screen nScreen = NewtFactory.createScreen(NewtFactory.AWT, nDisplay, 0); // screen 0 + nWindow = NewtFactory.createWindow(NewtFactory.AWT, nScreen, caps); + } + + GLWindow window = GLWindow.create(nWindow, caps); + + window.addGLEventListener(this); + + window.enablePerfLog(true); + // Size OpenGL to Video Surface + window.setSize(width, height); + window.setFullscreen(true); + window.setVisible(true); + + while (window.getDuration() < 31000) { + window.display(); + } + + // Shut things down cooperatively + window.close(); + window.getFactory().shutdown(); + System.out.println("Cube shut down cleanly."); + } catch (Throwable t) { + t.printStackTrace(); + } + } + + public static int USE_NEWT = 0; + public static int USE_AWT = 1 << 0; + + public static void main(String[] args) { + int type = USE_NEWT ; + for(int i=args.length-1; i>=0; i--) { + if(args[i].equals("-awt")) { + type |= USE_AWT; + } + } + new Cube().run(type); + System.exit(0); + } +} + diff --git a/src/demos/es2/openmax/MovieCube.java b/src/demos/es2/openmax/MovieCube.java new file mode 100755 index 0000000..196fd95 --- /dev/null +++ b/src/demos/es2/openmax/MovieCube.java @@ -0,0 +1,199 @@ +/* + * Copyright (c) 2008 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * - Redistribution of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistribution 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. + * + * Neither the name of Sun Microsystems, Inc. or the names of + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * This software is provided "AS IS," without a warranty of any kind. ALL + * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, + * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR + * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR + * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE + * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, + * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF + * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + * + */ + +package demos.es2.openmax; + +// import demos.es1.cube.Cube; + +import javax.media.opengl.*; +import javax.media.opengl.util.*; + +import com.sun.javafx.media.video.openmax.*; + +import java.nio.*; +import java.net.*; + +import com.sun.javafx.newt.*; + +public class MovieCube implements MouseListener, GLEventListener { + GLWindow window; + boolean quit = false; + Cube cube=null; + String stream; + OMXMoviePlayerImpl movie=null; + + public void mouseClicked(MouseEvent e) { + switch(e.getClickCount()) { + case 2: + quit=true; + break; + } + } + public void mouseEntered(MouseEvent e) { + } + public void mouseExited(MouseEvent e) { + } + public void mousePressed(MouseEvent e) { + } + public void mouseReleased(MouseEvent e) { + } + public void mouseMoved(MouseEvent e) { + } + public void mouseDragged(MouseEvent e) { + } + + public MovieCube (String stream) { + cube = new Cube(true, false); + this.stream = stream; + } + + private void run() { + System.err.println("MovieCube.run()"); + GLProfile.setProfileGL2ES2(); + try { + GLCapabilities caps = new GLCapabilities(); + // For emulation library, use 16 bpp + caps.setRedBits(5); + caps.setGreenBits(6); + caps.setBlueBits(5); + caps.setDepthBits(16); + + window = GLWindow.create(caps); + + window.addMouseListener(this); + window.addGLEventListener(this); + // window.setEventHandlerMode(GLWindow.EVENT_HANDLER_GL_CURRENT); // default + // window.setEventHandlerMode(GLWindow.EVENT_HANDLER_GL_NONE); // no current .. + + // Size OpenGL to Video Surface + window.setFullscreen(true); + window.setVisible(true); + + while (!quit) { + window.display(); + } + + // Shut things down cooperatively + if(null!=movie) { + movie.dispose(); + movie=null; + } + window.close(); + window.getFactory().shutdown(); + System.out.println("MovieCube shut down cleanly."); + } catch (Throwable t) { + t.printStackTrace(); + } + } + + public void init(GLAutoDrawable drawable) { + GL gl = drawable.getGL(); + + if(gl.isGLES2()) { + gl.getGLES2().enableFixedFunctionEmulationMode(GLES2.FIXED_EMULATION_VERTEXCOLORTEXTURE); + System.err.println("MovieCube Fixed emu: FIXED_EMULATION_VERTEXCOLORTEXTURE"); + } + + gl.glGetError(); // flush error .. + + gl.glActiveTexture(GL.GL_TEXTURE0); + + try { + movie = new OMXMoviePlayerImpl(new URL(stream)); + } catch (MalformedURLException mue) { mue.printStackTrace(); } + if(null!=movie) { + movie.play(); + } + + cube.init(drawable); + + /* + if(gl.isGLES2()) { + GLES2 gles2 = gl.getGLES2(); + + // Debug .. + //DebugGLES2 gldbg = new DebugGLES2(gles2); + //gles2.getContext().setGL(gldbg); + //gles2 = gldbg; + + // Trace .. + //TraceGLES2 gltrace = new TraceGLES2(gles2, System.err); + gles2.getContext().setGL(gltrace); + gl = gltrace; + }*/ + + } + + public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { + cube.reshape(drawable, x, y, width, height); + + System.out.println("reshape "+width+"x"+height); + } + + public void dispose() { + if(null!=movie) { + movie.dispose(); + movie=null; + } + } + + public void display(GLAutoDrawable drawable) { + GL gl = drawable.getGL(); + + com.sun.opengl.util.texture.Texture tex = null; + if(null!=movie) { + tex=movie.lockTexture(); + if(null!=tex) { + System.out.println("Use: "+tex); + tex.enable(); + tex.bind(); + } + } + cube.display(drawable); + if(null!=tex) { + tex.disable(); + movie.unlockTexture(); + } + } + + public void displayChanged(javax.media.opengl.GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) { + } + + public static void main(String[] args) { + String fname="file:///Storage Card/resources/a.mp4"; + if(args.length>0) fname=args[0]; + new MovieCube(fname).run(); + System.exit(0); + } +} + diff --git a/src/demos/es2/openmax/MovieSimple.java b/src/demos/es2/openmax/MovieSimple.java index 811868d..a25da04 100755 --- a/src/demos/es2/openmax/MovieSimple.java +++ b/src/demos/es2/openmax/MovieSimple.java @@ -1,3 +1,36 @@ +/* + * Copyright (c) 2008 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * - Redistribution of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistribution 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. + * + * Neither the name of Sun Microsystems, Inc. or the names of + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * This software is provided "AS IS," without a warranty of any kind. ALL + * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, + * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR + * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR + * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE + * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, + * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF + * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + * + */ + package demos.es2.openmax; @@ -125,13 +158,6 @@ public class MovieSimple implements MouseListener, GLEventListener { System.err.println("GL_EXTENSIONS:"); System.err.println(" " + gl.glGetString(gl.GL_EXTENSIONS)); - try { - movie = new OMXMoviePlayerImpl(new URL(stream)); - } catch (MalformedURLException mue) { mue.printStackTrace(); } - if(null!=movie) { - movie.play(); - } - if(gl.isGLES2()) { pmvMatrix = gl.getGLES2().getPMVMatrix(); } else { @@ -164,8 +190,8 @@ public class MovieSimple implements MouseListener, GLEventListener { xs = aspect; // b > h ys = 1f; // b > h } else { - ss = 1f; // b > h - ts = 1f/aspect; // b > h + ss = 1f/aspect; // b > h, crop width + ts = 1f; // b > h } // Allocate vertex array @@ -211,6 +237,13 @@ public class MovieSimple implements MouseListener, GLEventListener { // Let's show the completed shader state .. System.out.println(st); + + try { + movie = new OMXMoviePlayerImpl(new URL(stream)); + } catch (MalformedURLException mue) { mue.printStackTrace(); } + if(null!=movie) { + movie.play(); + } } public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { @@ -281,7 +314,6 @@ public class MovieSimple implements MouseListener, GLEventListener { gl.glDrawArrays(gl.GL_TRIANGLE_STRIP, 0, 4); if(null!=tex) { - gl.glFinish(); // fake sync tex.disable(); movie.unlockTexture(); } |