aboutsummaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/com/jogamp/opengl/util/av/SubtitleEvent.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jogl/classes/com/jogamp/opengl/util/av/SubtitleEvent.java')
-rw-r--r--src/jogl/classes/com/jogamp/opengl/util/av/SubtitleEvent.java65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/jogl/classes/com/jogamp/opengl/util/av/SubtitleEvent.java b/src/jogl/classes/com/jogamp/opengl/util/av/SubtitleEvent.java
new file mode 100644
index 000000000..ffae7542b
--- /dev/null
+++ b/src/jogl/classes/com/jogamp/opengl/util/av/SubtitleEvent.java
@@ -0,0 +1,65 @@
+package com.jogamp.opengl.util.av;
+
+/**
+ * Generic subtitle event
+ * <p>
+ * It is mandatory that the receiver {@link #release()} this instance
+ * after processing, allowing the resource owner to free or reuse it.
+ * </p>
+ */
+public abstract class SubtitleEvent {
+ public enum Format {
+ /** Denoting an {@link SubEmptyEvent}, usually used for PGS bitmap subtitle signaling end of previous {@link SubTextureEvent}. */
+ EMPTY,
+ /** Denoting {@link SubASSEventLine} using FFMpeg output w/o start, end:
+ * <pre>
+ 0 1 2 3 4 5 6 7 8
+ Seq, Layer, Style, Name, MarginL, MarginR, MarginV, Effect, TEXT
+ * </pre>
+ */
+ ASS_FFMPEG,
+ /** Denoting {@link SubASSEventLine}, just the plain text part */
+ ASS_TEXT,
+ /** Denoting {@link SubTextureEvent}, a bitmap'ed subtitle requiring a texture */
+ TEXTURE
+ };
+
+ /** {@link Format} of this subtitle event. */
+ public final Format type;
+ /** PTS start time to start showing this subtitle event. */
+ public final int pts_start;
+ /**
+ * PTS start time to end showing this subtitle event.
+ * <p>
+ * PGS {@link SubTextureEvent} have an infinite end-time, i.e. ({@link Integer#MAX_VALUE},
+ * and shall be overwritten by the next one or {@link SubEmptyEvent}.
+ * </p>
+ * @see #isEndDefined()
+ */
+ public final int pts_end;
+
+ public SubtitleEvent(final Format fmt, final int pts_start, final int pts_end) {
+ this.type = fmt;
+ this.pts_start = pts_start;
+ this.pts_end = pts_end;
+ }
+
+ /** Release the resources, if any, back to the owner. */
+ public abstract void release();
+
+ public final int getDuration() { return pts_end - pts_start + 1; }
+
+ /** See {@link #pts_end}. */
+ public final boolean isEndDefined() { return pts_end < Integer.MAX_VALUE; }
+
+ public final boolean isASS() { return Format.ASS_FFMPEG == type || Format.ASS_TEXT == type; }
+ public final boolean isTexture() { return Format.TEXTURE == type; }
+ public final boolean isEmpty() { return Format.EMPTY == type; }
+
+ public final String getStartString() {
+ final boolean ied = isEndDefined();
+ return "Sub["+type+", ["+pts_start+".."+(ied?pts_end:"undef")+"] "+(ied?getDuration():"undef")+" ms";
+ }
+
+
+} \ No newline at end of file