aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/jogamp/common/av/JavaSoundAudioSink.java
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2023-10-15 06:41:41 +0200
committerSven Gothel <[email protected]>2023-10-15 06:41:41 +0200
commit52725b4c6525487f93407f529dc0a758b387a4fc (patch)
treed0e35320b5f959f986a3553620e310ad4a96b115 /src/java/jogamp/common/av/JavaSoundAudioSink.java
parentdbd0236203f3d969575e62097f42a2a86e2a36ae (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/JavaSoundAudioSink.java')
-rw-r--r--src/java/jogamp/common/av/JavaSoundAudioSink.java11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/java/jogamp/common/av/JavaSoundAudioSink.java b/src/java/jogamp/common/av/JavaSoundAudioSink.java
index 556ada4..c556e92 100644
--- a/src/java/jogamp/common/av/JavaSoundAudioSink.java
+++ b/src/java/jogamp/common/av/JavaSoundAudioSink.java
@@ -36,6 +36,9 @@ import javax.sound.sampled.SourceDataLine;
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;
/***
* JavaSound Audio Sink
@@ -65,8 +68,8 @@ public final class JavaSoundAudioSink implements AudioSink {
private int userMaxChannels = 8;
private AudioFormat preferredFormat = null;
private AudioFormat chosenFormat = null;
-
private volatile boolean playRequested = false;
+ private final PTS pts = new PTS( () -> { return playRequested ? 1f : 0f; } );
private float volume = 1.0f;
static {
@@ -243,6 +246,7 @@ public final class JavaSoundAudioSink implements AudioSink {
public void flush() {
if( null != auline ) {
playRequested = false;
+ pts.set(0, TimeFrameI.INVALID_PTS);
auline.stop();
auline.flush();
}
@@ -290,6 +294,7 @@ public final class JavaSoundAudioSink implements AudioSink {
bytesLeft -= len;
written += len;
}
+ this.pts.set(Clock.currentMillis(), pts);
playImpl();
return new AudioDataFrame(pts, Math.round(1000f*chosenFormat.getBytesDuration(byteCount)), byteBuffer, byteCount);
}
@@ -315,10 +320,10 @@ public final class JavaSoundAudioSink implements AudioSink {
}
@Override
- public final int getPTS() { return 0; } // FIXME
+ public final PTS getPTS() { return pts; }
@Override
- public final int updateQueue() { return 0; } // FIXME
+ public final PTS updateQueue() { return pts; } // FIXME
@Override
public int getLastBufferedPTS() { return 0; } // FIXME