diff options
author | Sven Gothel <[email protected]> | 2012-04-11 19:46:37 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2012-04-11 19:46:37 +0200 |
commit | f10b30c16aeec428378d1d560d030b2d39801c4e (patch) | |
tree | 869ca02373385659ed356d781a602fdc2d7d1666 /src/jogl/classes/com/jogamp/opengl/util | |
parent | 41b75429e3801f8bf8d5eea679487ccc49ce2584 (diff) |
Refine GLMediaPlayer/TextureSequence, add MovieCube demo, fix minor bug in Texture
- Add TextureSequence, base interface of GLMediaPlayer to genralize texture streams
- TextureSequence / GLMediaPlayer: Use inner classes for event and texture data
- getLastTexture() shall never return 'null', initialization of TextureSequence (initGLStream(..), etc)
shall provide a TextureFrame w/ the stream's dimension.
- GLMediaPlayerImpl.createTexImageImpl() y-flip defaults to 'false'
impl. shall define y-flip, if required.
- Added MovieCube demo
- Fix Texture: initialize aspectRation for 'wrapping' ctor
-
Diffstat (limited to 'src/jogl/classes/com/jogamp/opengl/util')
6 files changed, 120 insertions, 92 deletions
diff --git a/src/jogl/classes/com/jogamp/opengl/util/av/GLMediaEventListener.java b/src/jogl/classes/com/jogamp/opengl/util/av/GLMediaEventListener.java deleted file mode 100644 index 9887a417c..000000000 --- a/src/jogl/classes/com/jogamp/opengl/util/av/GLMediaEventListener.java +++ /dev/null @@ -1,28 +0,0 @@ - -package com.jogamp.opengl.av; - -import javax.media.opengl.GL; - -public interface GLMediaEventListener { - - static final int EVENT_CHANGE_SIZE = 1<<0; - static final int EVENT_CHANGE_FPS = 1<<1; - static final int EVENT_CHANGE_BPS = 1<<2; - static final int EVENT_CHANGE_LENGTH = 1<<3; - - /** - * @param mp the event source - * @param event_mask the changes attributes - * @param when system time in msec. - */ - public void attributesChanges(GLMediaPlayer mp, int event_mask, long when); - - /** - * Signaling listeners that {@link GLMediaPlayer#getNextTexture(GL, boolean)} is able to deliver a new frame. - * @param mp the event source - * @param when system time in msec. - **/ - public void newFrameAvailable(GLMediaPlayer mp, long when); - -} - diff --git a/src/jogl/classes/com/jogamp/opengl/util/av/GLMediaPlayer.java b/src/jogl/classes/com/jogamp/opengl/util/av/GLMediaPlayer.java index b3827d520..d86c8bfd0 100644 --- a/src/jogl/classes/com/jogamp/opengl/util/av/GLMediaPlayer.java +++ b/src/jogl/classes/com/jogamp/opengl/util/av/GLMediaPlayer.java @@ -25,7 +25,7 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. */ -package com.jogamp.opengl.av; +package com.jogamp.opengl.util.av; import java.io.IOException; import java.net.URLConnection; @@ -35,8 +35,7 @@ import javax.media.opengl.GLException; import jogamp.opengl.Debug; -import com.jogamp.opengl.util.texture.Texture; -import com.jogamp.opengl.util.texture.TextureCoords; +import com.jogamp.opengl.util.texture.TextureSequence; /** * Lifecycle of an GLMediaPlayer: @@ -49,8 +48,23 @@ import com.jogamp.opengl.util.texture.TextureCoords; * <tr><td>{@link #destroy(GL)}</td> <td>ANY</td> <td>Uninitialized</td></tr> * </table> */ -public interface GLMediaPlayer { +public interface GLMediaPlayer extends TextureSequence { public static final boolean DEBUG = Debug.debug("GLMediaPlayer"); + + public interface GLMediaEventListener extends TexSeqEventListener<GLMediaPlayer> { + + static final int EVENT_CHANGE_SIZE = 1<<0; + static final int EVENT_CHANGE_FPS = 1<<1; + static final int EVENT_CHANGE_BPS = 1<<2; + static final int EVENT_CHANGE_LENGTH = 1<<3; + + /** + * @param mp the event source + * @param event_mask the changes attributes + * @param when system time in msec. + */ + public void attributesChanges(GLMediaPlayer mp, int event_mask, long when); + } public enum State { Uninitialized(0), Stopped(1), Playing(2), Paused(3); @@ -62,38 +76,14 @@ public interface GLMediaPlayer { } } - public static class TextureFrame { - public TextureFrame(Texture t) { - texture = t; - // stMatrix = new float[4*4]; - // ProjectFloat.makeIdentityf(stMatrix, 0); - } - - public final Texture getTexture() { return texture; } - // public final float[] getSTMatrix() { return stMatrix; } - - public String toString() { - return "TextureFrame[" + texture + "]"; - } - protected final Texture texture; - // protected final float[] stMatrix; - } - public int getTextureCount(); - public int getTextureTarget(); - /** Defaults to 0 */ public void setTextureUnit(int u); - public int getTextureUnit(); - /** Sets the texture min-mag filter, defaults to {@link GL#GL_NEAREST}. */ public void setTextureMinMagFilter(int[] minMagFilter); - public int[] getTextureMinMagFilter(); - /** Sets the texture min-mag filter, defaults to {@link GL#GL_CLAMP_TO_EDGE}. */ public void setTextureWrapST(int[] wrapST); - public int[] getTextureWrapST(); /** * Sets the stream to be used. Initializes all stream related states inclusive OpenGL ones, @@ -157,27 +147,17 @@ public interface GLMediaPlayer { public long seek(long msec); /** - * @return the last updated texture. Maybe <code>null</code> in case no last frame is available. - * Not blocking. + * {@inheritDoc} */ - public TextureFrame getLastTexture(); - + public TextureSequence.TextureFrame getLastTexture(); + /** - * Returns the next texture to be rendered. - * <p> - * Implementation shall block until next frame is available if <code>blocking</code> is <code>true</code>, - * otherwise it shall return the last frame in case a new frame is not available. - * </p> - * <p> - * Shall return <code>null</code> in case <i>no</i> frame is available. - * </p> + * {@inheritDoc} * * @see #addEventListener(GLMediaEventListener) * @see GLMediaEventListener#newFrameAvailable(GLMediaPlayer, long) */ - public TextureFrame getNextTexture(GL gl, boolean blocking); - - public TextureCoords getTextureCoords(); + public TextureSequence.TextureFrame getNextTexture(GL gl, boolean blocking); public URLConnection getURLConnection(); @@ -226,5 +206,6 @@ public interface GLMediaPlayer { public void removeEventListener(GLMediaEventListener l); - public GLMediaEventListener[] getEventListeners(); + public GLMediaEventListener[] getEventListeners(); + } diff --git a/src/jogl/classes/com/jogamp/opengl/util/av/GLMediaPlayerFactory.java b/src/jogl/classes/com/jogamp/opengl/util/av/GLMediaPlayerFactory.java index 1894f411f..df12fd12c 100644 --- a/src/jogl/classes/com/jogamp/opengl/util/av/GLMediaPlayerFactory.java +++ b/src/jogl/classes/com/jogamp/opengl/util/av/GLMediaPlayerFactory.java @@ -25,9 +25,9 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. */ -package com.jogamp.opengl.av; +package com.jogamp.opengl.util.av; -import jogamp.opengl.av.NullGLMediaPlayer; +import jogamp.opengl.util.av.NullGLMediaPlayer; import com.jogamp.common.os.AndroidVersion; import com.jogamp.common.os.Platform; diff --git a/src/jogl/classes/com/jogamp/opengl/util/texture/Texture.java b/src/jogl/classes/com/jogamp/opengl/util/texture/Texture.java index 208fd053d..a94b1f827 100644 --- a/src/jogl/classes/com/jogamp/opengl/util/texture/Texture.java +++ b/src/jogl/classes/com/jogamp/opengl/util/texture/Texture.java @@ -197,6 +197,7 @@ public class Texture { this.mustFlipVertically = mustFlipVertically; this.texWidth = texWidth; this.texHeight = texHeight; + aspectRatio = (float) imgWidth / (float) imgHeight; setImageSize(imgWidth, imgHeight, target); } diff --git a/src/jogl/classes/com/jogamp/opengl/util/texture/TextureCoords.java b/src/jogl/classes/com/jogamp/opengl/util/texture/TextureCoords.java index 61f5d116c..39647039b 100644 --- a/src/jogl/classes/com/jogamp/opengl/util/texture/TextureCoords.java +++ b/src/jogl/classes/com/jogamp/opengl/util/texture/TextureCoords.java @@ -36,8 +36,6 @@ package com.jogamp.opengl.util.texture; -import java.nio.FloatBuffer; - /** Specifies texture coordinates for a rectangular area of a texture. Note that some textures are inherently flipped vertically from OpenGL's standard coordinate system. This class takes care of @@ -79,22 +77,6 @@ public class TextureCoords { return d; } - /** Transfers <code>{s * ss, t * ts}</code> from this object into the given FloatBuffer in the following order: - * <pre> - * left, bottom - * right, bottom - * left, top - * right top - * </pre> - */ - public FloatBuffer getST_LB_RB_LT_RT(FloatBuffer d, float ss, float ts) { - d.put( left *ss); d.put( bottom*ts); - d.put( right *ss); d.put( bottom*ts); - d.put( left *ss); d.put( top *ts); - d.put( right *ss); d.put( top *ts); - return d; - } - /** Returns the leftmost (x) texture coordinate of this rectangle. */ public float left() { return left; } @@ -110,4 +92,6 @@ public class TextureCoords { /** Returns the topmost (y) texture coordinate of this rectangle. */ public float top() { return top; } + + public String toString() { return "TexCoord[h: "+left+" - "+right+", v: "+bottom+" - "+top+"]"; } } diff --git a/src/jogl/classes/com/jogamp/opengl/util/texture/TextureSequence.java b/src/jogl/classes/com/jogamp/opengl/util/texture/TextureSequence.java new file mode 100644 index 000000000..e6d21c613 --- /dev/null +++ b/src/jogl/classes/com/jogamp/opengl/util/texture/TextureSequence.java @@ -0,0 +1,90 @@ +/** + * 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 com.jogamp.opengl.util.texture; + +import javax.media.opengl.GL; + +public interface TextureSequence { + + public static class TextureFrame { + public TextureFrame(Texture t) { + texture = t; + // stMatrix = new float[4*4]; + // ProjectFloat.makeIdentityf(stMatrix, 0); + } + + public final Texture getTexture() { return texture; } + // public final float[] getSTMatrix() { return stMatrix; } + + public String toString() { + return "TextureFrame[" + texture + "]"; + } + protected final Texture texture; + // protected final float[] stMatrix; + } + + public interface TexSeqEventListener<T extends TextureSequence> { + /** + * Signaling listeners that {@link TextureSequence#getNextTexture(GL, boolean)} is able to deliver a new frame. + * @param ts the event source + * @param when system time in msec. + **/ + public void newFrameAvailable(T ts, long when); + } + + public int getTextureTarget(); + + public int getTextureUnit(); + + public int[] getTextureMinMagFilter(); + + public int[] getTextureWrapST(); + + /** + * Returns the last updated texture. + * <p> + * In case the instance is just initialized, it shall return a <code>TextureFrame</code> + * object with valid attributes. The texture content may be undefined + * until the first call of {@link #getNextTexture(GL, boolean)}.<br> + * </p> + * Not blocking. + */ + public TextureFrame getLastTexture(); + + /** + * Returns the next texture to be rendered. + * <p> + * Implementation shall block until next frame is available if <code>blocking</code> is <code>true</code>, + * otherwise it shall return the last frame in case a new frame is not available. + * </p> + * <p> + * Shall return <code>null</code> in case <i>no</i> frame is available. + * </p> + */ + public TextureFrame getNextTexture(GL gl, boolean blocking); +}
\ No newline at end of file |