28package com.jogamp.common.av;
30import java.time.format.DateTimeFormatter;
31import java.time.format.DateTimeParseException;
32import java.time.temporal.ChronoField;
33import java.util.concurrent.TimeUnit;
35import com.jogamp.common.os.Clock;
46public final class PTS {
53 private volatile long scr;
55 private volatile int pts;
80 this.speed = other.speed;
85 public boolean isValid() {
return TimeFrameI.INVALID_PTS != pts; }
88 public boolean isEOS() {
return TimeFrameI.END_OF_STREAM_PTS == pts; }
111 public void set(
final long scr,
final int pts) {
116 public void setPTS(
final int pts) { this.pts = pts; }
118 public void setSCR(
final long currentMillis) { scr = currentMillis; }
125 public void set(
final PTS other) {
126 this.scr = other.getSCR();
127 this.pts = other.getLast();
138 public int get(
final long currentMillis) {
139 return pts + (int) ( ( currentMillis - scr ) * speed.
get() + 0.5f );
145 public String
getTimeStr(
final long currentMillis,
final boolean addFractions) {
146 return toTimeStr(
get(currentMillis), addFractions);
151 return this.pts - rhs.
getLast();
155 public int diff(
final long currentMillis,
final PTS rhs) {
156 return get(currentMillis) - rhs.
get(currentMillis);
160 public String
toString() {
return String.valueOf(pts); }
162 public String
toString(
final long currentMillis) {
return "last "+pts+
" ms, current "+
get(currentMillis)+
" ms"; }
170 public static String
toTimeStr(
final long millis,
final boolean addFractions) {
171 final long h = TimeUnit.MILLISECONDS.toHours(millis);
172 final long m = TimeUnit.MILLISECONDS.toMinutes(millis);
175 return String.format(
"%02d:%02d:%02d.%03d",
177 m - TimeUnit.HOURS.toMinutes(h),
178 TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(m),
181 return String.format(
"%02d:%02d.%03d",
183 TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(m),
188 return String.format(
"%02d:%02d:%02d",
190 m - TimeUnit.HOURS.toMinutes(h),
191 TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(m));
193 return String.format(
"%02d:%02d",
195 TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(m));
206 final long h = TimeUnit.MILLISECONDS.toHours(millis);
207 final long m = TimeUnit.MILLISECONDS.toMinutes(millis);
208 return String.format(
"%02d:%02d:%02d.%03d",
210 m - TimeUnit.HOURS.toMinutes(h),
211 TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(m),
220 public static int toMillis(
final String v,
final boolean throwException) {
222 return Timestamp.parse(v).get(ChronoField.MILLI_OF_DAY);
223 }
catch(
final DateTimeParseException pe) {
224 if( throwException ) {
234 private static final DateTimeFormatter Timestamp = DateTimeFormatter.ofPattern(
235 "[H:]m:s[.[SSSSSSSSS][SSSSSSSS][SSSSSSS][SSSSSS][SSSSS][SSSS][SSS][SS][S]]");
Presentation Timestamp (PTS) with added System Clock Reference (SCR) via set(long,...
long getSCR()
Returns the System Clock Reference (SCR) in milliseconds of last PTS update via set(long,...
String toString(final long currentMillis)
String getSCRTimeStr(final boolean addFractions)
Returns getSCR() as time string representation via toTimeStr(long, boolean).
static int toMillis(final String v, final boolean throwException)
Returns milliseconds from given string representation in '[H[H]:]m[m]:s[s][.S*]'.
int diff(final long currentMillis, final PTS rhs)
Returns get(long) - rhs.
int get(final long currentMillis)
Returns the last updated PTS, interpolated by System Clock Reference (SCR) delta to given currentMill...
void setPTS(final int pts)
Sets the PTS value, see set(long, int).
boolean isValid()
Returns true if getLast() is unequal to TimeFrameI#INVALID_PTS.
boolean isEOS()
Returns true if getLast() equals to TimeFrameI#END_OF_STREAM_PTS, indicating end of stream (EOS).
String getTimeStr(final long currentMillis, final boolean addFractions)
Returns get(long) as time string representation via toTimeStr(long, boolean).
String getLastTimeStr(final boolean addFractions)
Returns getLast() as time string representation via toTimeStr(long, boolean).
int getCurrent()
Returns get(long) passing Clock#currentMillis().
PTS(final FloatValue speed, final long scr, final int pts)
Create new instance.
PTS(final PTS other)
Copy constructor.
int diffLast(final PTS rhs)
Returns getLast() - rhs.
void setSCR(final long currentMillis)
Sets the System Clock Reference (SCR) in milliseconds of last PTS update, see set(long,...
static int toMillis(final String v)
Returns milliseconds from given string representation in '[H[H]:]m[m]:s[s][.S*]' or -1 for parsing er...
PTS(final FloatValue speed)
Create new instance, initializing pts with TimeFrameI#INVALID_PTS and system-clock timestamp with zer...
float getSpeed()
Returns the external playback speed.
static String toTimeStr(final long millis, final boolean addFractions)
Returns a time string representation '[HH:]mm:ss[.SSS]', dropping unused hour quantities and fraction...
int getLast()
Returns the last updated PTS value via set(long, int) w/o System Clock Reference (SCR) interpolation.
static String toTimeStr(final long millis)
Returns a full time string representation 'HH:mm:ss.SSS'.
Integer time frame in milliseconds, maybe specialized for texture/video, audio, .
static final int INVALID_PTS
Constant marking an invalid PTS, i.e.
static native long currentMillis()
Returns current monotonic milliseconds since start of this application.
An external float value getter.