diff options
author | Sven Gothel <[email protected]> | 2023-10-15 06:41:41 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2023-10-15 06:41:41 +0200 |
commit | 52725b4c6525487f93407f529dc0a758b387a4fc (patch) | |
tree | d0e35320b5f959f986a3553620e310ad4a96b115 /src/java/jogamp/common/av/NullAudioSink.java | |
parent | dbd0236203f3d969575e62097f42a2a86e2a36ae (diff) |
Bug 1472: Enhance AV Sync: Pass through PTS object in AudioSink, tracking last PTS value against System Clock Reference (SCR)
This allows passing through actual SCR with the PTS when enqueueing audio frames
and utilizing it when querying actual time lapsed PTS value (interpolation SCR to currentMillis).
Diffstat (limited to 'src/java/jogamp/common/av/NullAudioSink.java')
-rw-r--r-- | src/java/jogamp/common/av/NullAudioSink.java | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/java/jogamp/common/av/NullAudioSink.java b/src/java/jogamp/common/av/NullAudioSink.java index d38c040..abc610f 100644 --- a/src/java/jogamp/common/av/NullAudioSink.java +++ b/src/java/jogamp/common/av/NullAudioSink.java @@ -31,12 +31,15 @@ import java.nio.ByteBuffer; import com.jogamp.common.av.AudioFormat; import com.jogamp.common.av.AudioSink; +import com.jogamp.common.av.PTS; +import com.jogamp.common.av.TimeFrameI; +import com.jogamp.common.os.Clock; public final class NullAudioSink implements AudioSink { private volatile float playSpeed = 1.0f; private volatile boolean playRequested = false; - private volatile int playingPTS = AudioFrame.INVALID_PTS; + private final PTS pts = new PTS( () -> { return playRequested ? 1f : 0f; } ); private float volume = 1.0f; private AudioFormat chosenFormat; @@ -153,7 +156,7 @@ public final class NullAudioSink implements AudioSink { } @Override - public void flush() { } + public void flush() { pts.set(0, TimeFrameI.INVALID_PTS); } @Override public void destroy() { @@ -180,10 +183,10 @@ public final class NullAudioSink implements AudioSink { public float getAvgFrameDuration() { return 0f; } @Override - public final int getPTS() { return playingPTS; } + public final PTS getPTS() { return pts; } @Override - public final int updateQueue() { return playingPTS; } + public final PTS updateQueue() { return pts; } @Override public int getLastBufferedPTS() { return 0; } @@ -196,7 +199,7 @@ public final class NullAudioSink implements AudioSink { if( !available || null == chosenFormat ) { return null; } - playingPTS = pts; + this.pts.set(Clock.currentMillis(), pts); return null; } } |