aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/jogl/classes/com/jogamp/opengl/util/av/GLMediaPlayer.java5
-rw-r--r--src/jogl/classes/jogamp/opengl/util/av/GLMediaPlayerImpl.java18
2 files changed, 15 insertions, 8 deletions
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 94efb43c0..4ca6ae503 100644
--- a/src/jogl/classes/com/jogamp/opengl/util/av/GLMediaPlayer.java
+++ b/src/jogl/classes/com/jogamp/opengl/util/av/GLMediaPlayer.java
@@ -481,8 +481,9 @@ public interface GLMediaPlayer extends TextureSequence {
* @param vid video stream id, see <a href="#streamIDs">audio and video Stream IDs</a>
* @param aid video stream id, see <a href="#streamIDs">audio and video Stream IDs</a>
* @param textureCount desired number of buffered textures to be decoded off-thread, will be validated by implementation.
- * The minimum value is {@link #TEXTURE_COUNT_DEFAULT}.
- * Ignored if video is muted.
+ * The minimum value is {@link #TEXTURE_COUNT_MIN} (single-threaded) or above to enable multi-threaded stream decoding.
+ * Default is {@link #TEXTURE_COUNT_DEFAULT}.
+ * Value is ignored if video is muted.
* @throws IllegalStateException if not invoked in {@link State#Uninitialized}
* @throws IllegalArgumentException if arguments are invalid
* @since 2.3.0
diff --git a/src/jogl/classes/jogamp/opengl/util/av/GLMediaPlayerImpl.java b/src/jogl/classes/jogamp/opengl/util/av/GLMediaPlayerImpl.java
index 2c916dddc..d0f6fb596 100644
--- a/src/jogl/classes/jogamp/opengl/util/av/GLMediaPlayerImpl.java
+++ b/src/jogl/classes/jogamp/opengl/util/av/GLMediaPlayerImpl.java
@@ -791,9 +791,9 @@ public abstract class GLMediaPlayerImpl implements GLMediaPlayer {
if( null != streamWorker ) {
streamWorker.initGL(gl);
streamWorker.resume();
- changeState(new GLMediaPlayer.EventMask(), State.Paused);
- resume();
}
+ changeState(new GLMediaPlayer.EventMask(), State.Paused);
+ resume();
} else if( null == gl ) {
width = 0;
height = 0;
@@ -1129,7 +1129,7 @@ public abstract class GLMediaPlayerImpl implements GLMediaPlayer {
hasVideoFrame = true;
repeatedFrame++;
syncModeA = 'r';
- if( videoFramesFree.isEmpty() && audio_queued_ms <= min0_audio_queued_ms ) {
+ if( null != videoFramesDecoded && videoFramesFree.isEmpty() && audio_queued_ms <= min0_audio_queued_ms ) {
growVideoFrameBuffers(gl, video_queue_growth);
syncModeA = 'z';
}
@@ -1264,7 +1264,7 @@ public abstract class GLMediaPlayerImpl implements GLMediaPlayer {
cachedFrame = nextFrame;
nextFrame = null;
syncModeB = 'c';
- if( videoFramesFree.isEmpty() && audio_queued_ms <= min1_audio_queued_ms ) {
+ if( null != videoFramesDecoded && videoFramesFree.isEmpty() && audio_queued_ms <= min1_audio_queued_ms ) {
growVideoFrameBuffers(gl, video_queue_growth);
syncModeB = 'z';
}
@@ -1891,8 +1891,14 @@ public abstract class GLMediaPlayerImpl implements GLMediaPlayer {
d_avpts1 = 0;
}
- final int vFramesQueued = this.videoFramesDecoded.size();
- final int vFramesFree = this.videoFramesFree.size();
+ final int vFramesQueued, vFramesFree;
+ if( null != videoFramesDecoded ) {
+ vFramesQueued = this.videoFramesDecoded.size();
+ vFramesFree = this.videoFramesFree.size();
+ } else {
+ vFramesQueued = 0;
+ vFramesFree = 1;
+ }
return "frames[p"+presentedFrameCount+" d"+decodedFrameCount+" q"+vFramesQueued+" r"+repeatedFrame+" f"+vFramesFree+"/"+videoFramesOrig.length+"], "+
"dAV[v-a "+d_avpts0+", avg "+d_avpts1+"], SCR "+av_scr.get(currentMillis)+
", vpts "+video_pts.getLast()+", dSCR["+d_vpts+", avg "+video_dpts_avrg+"]"+