From c594cf1dc9f37dd1a6d861a1aa5426abbd082d60 Mon Sep 17 00:00:00 2001
From: Sven Gothel <sgothel@jausoft.com>
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/GLMediaPlayer.java')

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;
  * </ul>
  */
 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.
+     * <ul>
+     *   <li>ANY -> Uninitialized - invokes destroy(GL)</li>
+     *   <li>Uninitialized -> Stopped</li>
+     * </ul>
+     */
     public void setStream(GL gl, URL url) throws IOException;
 
-    /** Releases the GL and stream resources. */
+    /**
+     * Releases the GL and stream resources.
+     * <p>
+     * <code>ANY</code> -> Uninitialized
+     * </p>
+     */
     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();
 
+    /**
+     * <i>Warning:</i> Optional information, may not be supported by implementation.
+     * @return the code of the video stream, if available 
+     */
     public String getVideoCodec();
 
+    /**
+     * <i>Warning:</i> Optional information, may not be supported by implementation.
+     * @return the code of the audio stream, if available 
+     */
     public String getAudioCodec();
 
+    /**
+     * <i>Warning:</i> 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();
+    
+    /**
+     * <i>Warning:</i> Optional information, may not be supported by implementation.
+     * @return the overall bitrate of the stream.  
+     */
     public long getBitrate();
 
+    /**
+     * <i>Warning:</i> Optional information, may not be supported by implementation.
+     * @return the framerate of the video
+     */
     public int getFramerate();
 
     public int getWidth();
-- 
cgit v1.2.3