aboutsummaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/jogamp/opengl/util/av/impl
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2023-03-13 05:59:34 +0100
committerSven Gothel <[email protected]>2023-03-13 05:59:34 +0100
commit913b00f8b876e29af91677ef61b3eb35d6853e6e (patch)
tree17bc28ad255f1e086b2aa80028d4e6fb1ffd0456 /src/jogl/classes/jogamp/opengl/util/av/impl
parent5efd3a6d9cf12d38ce6d7c91f9c5968927f3253a (diff)
GLMediaPlayer: Overhaul and simplify states, allow usage before stream ready showing test-texture. Adding stop(); (API Change)
- allow multiple initGL(..) @ uninitialized and initialized - allows usage before stream is ready - using a test-texture @ uninitialized - adding stop() API change - initStream() -> playStream() - play() -> resume() FFMPEG: Added 'ready' check for robustness
Diffstat (limited to 'src/jogl/classes/jogamp/opengl/util/av/impl')
-rw-r--r--src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGMediaPlayer.java35
-rw-r--r--src/jogl/classes/jogamp/opengl/util/av/impl/OMXGLMediaPlayer.java10
2 files changed, 27 insertions, 18 deletions
diff --git a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGMediaPlayer.java b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGMediaPlayer.java
index aae1d75d0..91bef005a 100644
--- a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGMediaPlayer.java
+++ b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGMediaPlayer.java
@@ -297,16 +297,19 @@ public class FFMPEGMediaPlayer extends GLMediaPlayerImpl {
if(!available) {
throw new RuntimeException("FFMPEGMediaPlayer not available");
}
+ psm = new GLPixelStorageModes();
+ initSelf();
+ }
+ private void initSelf() {
moviePtr = natives.createInstance0(this, DEBUG_NATIVE);
if(0==moviePtr) {
throw new GLException("Couldn't create FFMPEGInstance");
}
- psm = new GLPixelStorageModes();
audioSink = null;
}
@Override
- protected final void destroyImpl(final GL gl) {
+ protected final void destroyImpl() {
if (moviePtr != 0) {
natives.destroyInstance0(moviePtr);
moviePtr = 0;
@@ -321,6 +324,12 @@ public class FFMPEGMediaPlayer extends GLMediaPlayerImpl {
}
}
+ @Override
+ protected void stopImpl() {
+ destroyImpl();
+ initSelf();
+ }
+
public static final String dev_video_linux = "/dev/video";
@Override
@@ -394,9 +403,6 @@ public class FFMPEGMediaPlayer extends GLMediaPlayerImpl {
if(0==moviePtr) {
throw new GLException("FFMPEG native instance null");
}
- if(null == audioSink) {
- throw new GLException("AudioSink null");
- }
final int audioQueueLimit;
if( null != gl && STREAM_ID_NONE != getVID() ) {
final GLContextImpl ctx = (GLContextImpl)gl.getContext();
@@ -419,8 +425,10 @@ public class FFMPEGMediaPlayer extends GLMediaPlayerImpl {
System.err.println("initGL: p3 avChosen "+avChosenAudioFormat);
}
- if( STREAM_ID_NONE == getAID() ) {
- audioSink.destroy();
+ if( STREAM_ID_NONE == getAID() || null == audioSink ) {
+ if(null != audioSink) {
+ audioSink.destroy();
+ }
audioSink = AudioSinkFactory.createNull();
audioSink.init(AudioSink.DefaultFormat, 0, AudioSink.DefaultInitialQueueSize, AudioSink.DefaultQueueGrowAmount, audioQueueLimit);
} else {
@@ -475,6 +483,7 @@ public class FFMPEGMediaPlayer extends GLMediaPlayerImpl {
}
setTextureFormat(tif, tf);
setTextureType(tt);
+ setIsGLOriented(false);
if(DEBUG) {
System.err.println("initGL: p5: video "+vPixelFmt+", planes "+vPlanes+", bpp "+vBitsPerPixel+"/"+vBytesPerPixelPerPlane+
", tex "+texWidth+"x"+texHeight+", usesTexLookupShader "+usesTexLookupShader);
@@ -694,10 +703,7 @@ public class FFMPEGMediaPlayer extends GLMediaPlayerImpl {
* Otherwise the call is delegated to it's super class.
*/
@Override
- public final String getTextureLookupFunctionName(final String desiredFuncName) throws IllegalStateException {
- if( State.Uninitialized == getState() ) {
- throw new IllegalStateException("Instance not initialized: "+this);
- }
+ public final String getTextureLookupFunctionName(final String desiredFuncName) {
if( usesTexLookupShader ) {
if(null != desiredFuncName && desiredFuncName.length()>0) {
texLookupFuncName = desiredFuncName;
@@ -714,10 +720,7 @@ public class FFMPEGMediaPlayer extends GLMediaPlayerImpl {
* e.g. YUV420P to RGB. Otherwise the call is delegated to it's super class.
*/
@Override
- public final String getTextureLookupFragmentShaderImpl() throws IllegalStateException {
- if( State.Uninitialized == getState() ) {
- throw new IllegalStateException("Instance not initialized: "+this);
- }
+ public final String getTextureLookupFragmentShaderImpl() {
if( !usesTexLookupShader ) {
return super.getTextureLookupFragmentShaderImpl();
}
@@ -825,7 +828,7 @@ public class FFMPEGMediaPlayer extends GLMediaPlayerImpl {
}
@Override
- public final boolean playImpl() {
+ public final boolean resumeImpl() {
if(0==moviePtr) {
return false;
}
diff --git a/src/jogl/classes/jogamp/opengl/util/av/impl/OMXGLMediaPlayer.java b/src/jogl/classes/jogamp/opengl/util/av/impl/OMXGLMediaPlayer.java
index c69108b04..336084734 100644
--- a/src/jogl/classes/jogamp/opengl/util/av/impl/OMXGLMediaPlayer.java
+++ b/src/jogl/classes/jogamp/opengl/util/av/impl/OMXGLMediaPlayer.java
@@ -86,7 +86,7 @@ public class OMXGLMediaPlayer extends EGLMediaPlayerImpl {
}
@Override
- protected void destroyImpl(final GL gl) {
+ protected void destroyImpl() {
if (moviePtr != 0) {
_stop(moviePtr);
_detachVideoRenderer(moviePtr);
@@ -137,7 +137,7 @@ public class OMXGLMediaPlayer extends EGLMediaPlayerImpl {
}
@Override
- public synchronized boolean playImpl() {
+ public synchronized boolean resumeImpl() {
if(0==moviePtr) {
return false;
}
@@ -155,6 +155,12 @@ public class OMXGLMediaPlayer extends EGLMediaPlayerImpl {
return true;
}
+ @Override
+ protected final void stopImpl() {
+ destroyImpl();
+ initOMX();
+ }
+
/** @return time position after issuing the command */
@Override
protected int seekImpl(final int msec) {