aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2023-12-30 21:13:54 +0100
committerSven Gothel <[email protected]>2023-12-30 21:13:54 +0100
commite3b10d335cc2fb659bb5bd3d8ab82e93eb36080c (patch)
treebfdb86240163f37d313a8b1fb86fa3a8ca1fd65e
parent2a48dd9009e5b0b17d78f016e149e4cb387539e6 (diff)
PTS: Add millisToTimeStr(..) convenient time string representation, also used by added get{SCR, Last, }TimeStr(..) methods
-rw-r--r--src/java/com/jogamp/common/av/PTS.java67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/java/com/jogamp/common/av/PTS.java b/src/java/com/jogamp/common/av/PTS.java
index 7ead54a..7d6d4fd 100644
--- a/src/java/com/jogamp/common/av/PTS.java
+++ b/src/java/com/jogamp/common/av/PTS.java
@@ -27,6 +27,8 @@
*/
package com.jogamp.common.av;
+import java.util.concurrent.TimeUnit;
+
import com.jogamp.common.os.Clock;
/**
@@ -84,8 +86,17 @@ public final class PTS {
/** Returns the System Clock Reference (SCR) in milliseconds of last PTS update via {@link #set(long, int)}. */
public long getSCR() { return scr; }
+ /** Returns {@link #getSCR()} as time string representation via {@link #millisToTimeStr(long, boolean)}. */
+ public String getSCRTimeStr(final boolean addFractions) {
+ return millisToTimeStr(getSCR(), addFractions);
+ }
/** Returns the last updated PTS value via {@link #set(long, int)} w/o System Clock Reference (SCR) interpolation. */
public int getLast() { return pts; }
+ /** Returns {@link #getLast()} as time string representation via {@link #millisToTimeStr(long, boolean)}. */
+ public String getLastTimeStr(final boolean addFractions) {
+ return millisToTimeStr(getLast(), addFractions);
+ }
+
/** Returns the external playback speed. */
public float getSpeed() { return speed.get(); }
@@ -125,6 +136,11 @@ public final class PTS {
return pts + (int) ( ( currentMillis - scr ) * speed.get() + 0.5f );
}
+ /** Returns {@link #get(long)} as time string representation via {@link #millisToTimeStr(long, boolean)}. */
+ public String getTimeStr(final long currentMillis, final boolean addFractions) {
+ return millisToTimeStr(get(currentMillis), addFractions);
+ }
+
/** Returns {@link #getLast()} - rhs.{@link #getLast()}. */
public int diffLast(final PTS rhs) {
return this.pts - rhs.getLast();
@@ -139,4 +155,55 @@ public final class PTS {
public String toString() { return String.valueOf(pts); }
public String toString(final long currentMillis) { return "last "+pts+" ms, current "+get(currentMillis)+" ms"; }
+
+ /**
+ * Returns a time string representation '[hh:]mm:ss[.sss]', dropping unused hour quantities and fractions of seconds optionally.
+ * @param millis complete time in milliseconds
+ * @param addFractions toggle for fractions of seconds
+ * @see #millisToTimeStr(long)
+ */
+ public static String millisToTimeStr(final long millis, final boolean addFractions) {
+ final long h = TimeUnit.MILLISECONDS.toHours(millis);
+ final long m = TimeUnit.MILLISECONDS.toMinutes(millis);
+ if( addFractions ) {
+ if( 0 < h ) {
+ return String.format("%02d:%02d:%02d.%03d",
+ h,
+ m - TimeUnit.HOURS.toMinutes(h),
+ TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(m),
+ millis%1000);
+ } else {
+ return String.format("%02d:%02d.%03d",
+ m,
+ TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(m),
+ millis%1000);
+ }
+ } else {
+ if( 0 < h ) {
+ return String.format("%02d:%02d:%02d",
+ h,
+ m - TimeUnit.HOURS.toMinutes(h),
+ TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(m));
+ } else {
+ return String.format("%02d:%02d",
+ m,
+ TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(m));
+ }
+ }
+ }
+
+ /**
+ * Returns a full time string representation 'hh:mm:ss.sss'.
+ * @param millis complete time in milliseconds
+ * @see #millisToTimeStr(long, boolean)
+ */
+ public static String millisToTimeStr(final long millis) {
+ final long h = TimeUnit.MILLISECONDS.toHours(millis);
+ final long m = TimeUnit.MILLISECONDS.toMinutes(millis);
+ return String.format("%02d:%02d:%02d.%03d",
+ h,
+ m - TimeUnit.HOURS.toMinutes(h),
+ TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(m),
+ millis%1000);
+ }
}