aboutsummaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/jogamp
diff options
context:
space:
mode:
authorSven Gothel <sgothel@jausoft.com>2023-10-16 04:05:40 +0200
committerSven Gothel <sgothel@jausoft.com>2023-10-16 04:05:40 +0200
commitdac49f32e09d61f5ba9be53a21d351843a48761b (patch)
tree7aa8990408bc0dd81c81172ba006859be6c29f10 /src/jogl/classes/jogamp
parentee29eaf770d0d3627e5989dcae58a87cf27184d3 (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.java33
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);
}