All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jogamp.opengl.util.av.GLMediaPlayer Maven / Gradle / Ivy

There is a newer version: 2.3.2
Show newest version
/**
 * 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.av;

import java.io.IOException;
import java.net.URLConnection;

import javax.media.opengl.GL;
import javax.media.opengl.GLException;

import jogamp.opengl.Debug;

import com.jogamp.opengl.util.texture.TextureSequence;

/**
 * Lifecycle of an GLMediaPlayer:
 * 
 *   
 *   
 *   
 *   
 *   
 *   
 * 
action state before state after
{@link #initGLStream(GL, URLConnection)} Uninitialized Stopped
{@link #start()} Stopped, Paused Playing
{@link #stop()} Playing, Paused Stopped
{@link #pause()} Playing Paused
{@link #destroy(GL)} ANY Uninitialized
*

* Current implementations (check each API doc link for details): *

    *
  • {@link jogamp.opengl.util.av.NullGLMediaPlayer}
  • *
  • {@link jogamp.opengl.util.av.impl.OMXGLMediaPlayer}
  • *
  • {@link jogamp.opengl.util.av.impl.FFMPEGMediaPlayer}
  • *
  • {@link jogamp.opengl.android.av.AndroidGLMediaPlayerAPI14}
  • *
*

*

* Variable type, value range and dimension has been chosen to suit embedded CPUs * and characteristics of audio and video streaming. * Milliseconds of type integer with a maximum value of {@link Integer#MAX_VALUE} * will allow tracking time up 2,147,483.647 seconds or * 24 days 20 hours 31 minutes and 23 seconds. * Milliseconds granularity is also more than enough to deal with A-V synchronization, * where the threshold usually lies within 100ms. *

*/ public interface GLMediaPlayer extends TextureSequence { public static final boolean DEBUG = Debug.debug("GLMediaPlayer"); public interface GLMediaEventListener extends TexSeqEventListener { 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; static final int EVENT_CHANGE_CODEC = 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); public final int id; State(int id){ this.id = id; } } public int getTextureCount(); /** Defaults to 0 */ public void setTextureUnit(int u); /** Sets the texture min-mag filter, defaults to {@link GL#GL_NEAREST}. */ public void setTextureMinMagFilter(int[] minMagFilter); /** Sets the texture min-mag filter, defaults to {@link GL#GL_CLAMP_TO_EDGE}. */ public void setTextureWrapST(int[] wrapST); /** * Sets the stream to be used. Initializes all stream related states inclusive OpenGL ones, * if gl is not null. *

* Uninitialized -> Stopped *

* @param gl current GL object. If null, no video output and textures will be available. * @param urlConn the stream connection * @return the new state * * @throws IllegalStateException if not invoked in state Uninitialized * @throws IOException in case of difficulties to open or process the stream * @throws GLException in case of difficulties to initialize the GL resources */ public State initGLStream(GL gl, URLConnection urlConn) throws IllegalStateException, GLException, IOException; /** * Releases the GL and stream resources. *

* ANY -> Uninitialized *

*/ public State destroy(GL gl); public void setPlaySpeed(float rate); public float getPlaySpeed(); /** * Stopped/Paused -> Playing */ public State start(); /** * 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(); /** * Allowed in state Stopped, Playing and Paused, otherwise ignored. * * @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); /** * {@inheritDoc} */ @Override public TextureSequence.TextureFrame getLastTexture() throws IllegalStateException; /** * {@inheritDoc} * *

* In case the current state is not {@link State#Playing}, {@link #getLastTexture()} is returned. *

* * @see #addEventListener(GLMediaEventListener) * @see GLMediaEventListener#newFrameAvailable(GLMediaPlayer, long) */ @Override public TextureSequence.TextureFrame getNextTexture(GL gl, boolean blocking) throws IllegalStateException; public URLConnection getURLConnection(); /** * 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 int getDuration(); /** * Warning: Optional information, may not be supported by implementation. * @return the overall bitrate of the stream. */ public long getStreamBitrate(); /** * Warning: Optional information, may not be supported by implementation. * @return video bitrate */ public int getVideoBitrate(); /** * Warning: Optional information, may not be supported by implementation. * @return the audio bitrate */ public int getAudioBitrate(); /** * Warning: Optional information, may not be supported by implementation. * @return the framerate of the video */ public float getFramerate(); public int getWidth(); public int getHeight(); public String toString(); public void addEventListener(GLMediaEventListener l); public void removeEventListener(GLMediaEventListener l); public GLMediaEventListener[] getEventListeners(); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy