diff options
author | Sven Gothel <sgothel@jausoft.com> | 2023-10-16 04:05:40 +0200 |
---|---|---|
committer | Sven Gothel <sgothel@jausoft.com> | 2023-10-16 04:05:40 +0200 |
commit | dac49f32e09d61f5ba9be53a21d351843a48761b (patch) | |
tree | 7aa8990408bc0dd81c81172ba006859be6c29f10 /src/jogl/classes/jogamp | |
parent | ee29eaf770d0d3627e5989dcae58a87cf27184d3 (diff) |
Bug 1472: GLMediaPlayer: Handle setPlaySpeed() like setAudioVolume() if stream is not yet initialized or playing, cached clipped value and set at initGL(..)
Diffstat (limited to 'src/jogl/classes/jogamp')
-rw-r--r-- | src/jogl/classes/jogamp/opengl/util/av/GLMediaPlayerImpl.java | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/src/jogl/classes/jogamp/opengl/util/av/GLMediaPlayerImpl.java b/src/jogl/classes/jogamp/opengl/util/av/GLMediaPlayerImpl.java index 106a374bf..793470a5e 100644 --- a/src/jogl/classes/jogamp/opengl/util/av/GLMediaPlayerImpl.java +++ b/src/jogl/classes/jogamp/opengl/util/av/GLMediaPlayerImpl.java @@ -539,21 +539,32 @@ public abstract class GLMediaPlayerImpl implements GLMediaPlayer { @Override public final float getPlaySpeed() { return playSpeed; } + private static final float clipZeroOneAllowMax(final float v) { + if( v < 0.01f ) { + return 0.0f; + } else if( Math.abs(1.0f - v) < 0.01f ) { + return 1.0f; + } + return v; + } + @Override public final boolean setPlaySpeed(float rate) { synchronized( stateLock ) { final float preSpeed = playSpeed; boolean res = false; - if(State.Uninitialized != state ) { - if( rate > 0.01f ) { - if( Math.abs(1.0f - rate) < 0.01f ) { - rate = 1.0f; - } + rate = clipZeroOneAllowMax(rate); + if( rate > 0.1f ) { + if(State.Uninitialized != state ) { if( setPlaySpeedImpl(rate) ) { resetAVPTS(); playSpeed = rate; res = true; } + } else { + // earmark .. + playSpeed = rate; + res = true; } } if(DEBUG) { logout.println("setPlaySpeed("+rate+"): "+state+", "+preSpeed+" -> "+playSpeed+", "+toString()); } @@ -596,21 +607,12 @@ public abstract class GLMediaPlayerImpl implements GLMediaPlayer { } } - private static final float clipAudioVolume(final float v) { - if( v < 0.01f ) { - return 0.0f; - } else if( Math.abs(1.0f - v) < 0.01f ) { - return 1.0f; - } - return v; - } - @Override public boolean setAudioVolume(float v) { synchronized( stateLock ) { final float preVolume = audioVolume; boolean res = false; - v = clipAudioVolume(v); + v = clipZeroOneAllowMax(v); if(State.Uninitialized != state ) { if( setAudioVolumeImpl(v) ) { audioVolume = v; @@ -754,6 +756,7 @@ public abstract class GLMediaPlayerImpl implements GLMediaPlayer { if( State.Uninitialized != state ) { initGLImpl(gl); setAudioVolume( audioVolume ); // update volume + setPlaySpeed( playSpeed ); // update playSpeed if(DEBUG) { logout.println("initGLImpl.X "+this); } |