From c594cf1dc9f37dd1a6d861a1aa5426abbd082d60 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Tue, 3 Apr 2012 18:49:24 +0200 Subject: GLMediaPlayer: API and implementation update. First working version on Android API 14 - Introduce states - Customize / Access texture target,count,features. - Expose TextureFrame. - Use 'long' for all time values in msec. - Mark information optional in API doc (fps, bps, ..) --- .../com/jogamp/opengl/av/GLMediaPlayer.java | 112 ++++++++++++++++++--- 1 file changed, 100 insertions(+), 12 deletions(-) (limited to 'src/jogl/classes/com/jogamp/opengl/av') diff --git a/src/jogl/classes/com/jogamp/opengl/av/GLMediaPlayer.java b/src/jogl/classes/com/jogamp/opengl/av/GLMediaPlayer.java index 71e0e16d9..0d07f69ac 100644 --- a/src/jogl/classes/com/jogamp/opengl/av/GLMediaPlayer.java +++ b/src/jogl/classes/com/jogamp/opengl/av/GLMediaPlayer.java @@ -5,6 +5,8 @@ import java.net.URL; import javax.media.opengl.GL; +import jogamp.opengl.Debug; + import com.jogamp.opengl.util.texture.Texture; /** @@ -17,63 +19,149 @@ import com.jogamp.opengl.util.texture.Texture; * */ public interface GLMediaPlayer { + public static final boolean DEBUG = Debug.debug("GLMediaPlayer"); + + public enum State { + Uninitialized(0), Stopped(1), Playing(2), Paused(3); + + public final int id; + State(int id){ + this.id = id; + } + } + 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; } - /** Sets the stream to be used. Initializes all stream related states and GL resources. */ + public int getTextureCount(); + + public int getTextureTarget(); + + /** 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 and GL resources. + * + */ public void setStream(GL gl, URL url) throws IOException; - /** Releases the GL and stream resources. */ + /** + * Releases the GL and stream resources. + *

+ * ANY -> Uninitialized + *

+ */ public void destroy(GL gl); public void setPlaySpeed(float rate); public float getPlaySpeed(); - public void start(); - - public void pause(); + /** + * Stopped/Paused -> Playing + */ + public State start(); - public void stop(); + /** + * Playing -> Paused + */ + public State pause(); + /** + * Playing/Paused -> Stopped + */ + public State stop(); + + /** + * @return the current state, either Uninitialized, Stopped, Playing, Paused + */ + public State getState(); + /** * @return time current position in milliseconds **/ - public int getCurrentPosition(); + public long getCurrentPosition(); /** * @param msec absolute desired time position in milliseconds * @return time current position in milliseconds, after seeking to the desired position **/ - public int seek(int msec); - - public Texture getLastTextureID(); - - public Texture getNextTextureID(); + public long seek(long msec); + /** + * @return the last updated texture. Not blocking. + */ + public TextureFrame getLastTexture(); + + /** + * @return the next texture, which should be rendered. May block, depending on implementation. + * + * @see #addEventListener(GLMediaEventListener) + * @see GLMediaEventListener#newFrameAvailable(GLMediaPlayer, TextureFrame) + */ + public TextureFrame getNextTexture(); + public boolean isValid(); public URL getURL(); + /** + * Warning: Optional information, may not be supported by implementation. + * @return the code of the video stream, if available + */ public String getVideoCodec(); + /** + * Warning: Optional information, may not be supported by implementation. + * @return the code of the audio stream, if available + */ public String getAudioCodec(); + /** + * Warning: Optional information, may not be supported by implementation. + * @return the total number of video frames + */ public long getTotalFrames(); + /** + * @return total duration of stream in msec. + */ + public long getDuration(); + + /** + * Warning: Optional information, may not be supported by implementation. + * @return the overall bitrate of the stream. + */ public long getBitrate(); + /** + * Warning: Optional information, may not be supported by implementation. + * @return the framerate of the video + */ public int getFramerate(); public int getWidth(); -- cgit v1.2.3