summaryrefslogtreecommitdiffstats
path: root/mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/extractor/mkv/EbmlProcessor.java
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/extractor/mkv/EbmlProcessor.java')
-rw-r--r--mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/extractor/mkv/EbmlProcessor.java150
1 files changed, 150 insertions, 0 deletions
diff --git a/mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/extractor/mkv/EbmlProcessor.java b/mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/extractor/mkv/EbmlProcessor.java
new file mode 100644
index 0000000000..188ced0554
--- /dev/null
+++ b/mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/extractor/mkv/EbmlProcessor.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.mozilla.thirdparty.com.google.android.exoplayer2.extractor.mkv;
+
+import androidx.annotation.IntDef;
+import org.mozilla.thirdparty.com.google.android.exoplayer2.ParserException;
+import org.mozilla.thirdparty.com.google.android.exoplayer2.extractor.ExtractorInput;
+import java.io.IOException;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/** Defines EBML element IDs/types and processes events. */
+public interface EbmlProcessor {
+
+ /**
+ * EBML element types. One of {@link #ELEMENT_TYPE_UNKNOWN}, {@link #ELEMENT_TYPE_MASTER}, {@link
+ * #ELEMENT_TYPE_UNSIGNED_INT}, {@link #ELEMENT_TYPE_STRING}, {@link #ELEMENT_TYPE_BINARY} or
+ * {@link #ELEMENT_TYPE_FLOAT}.
+ */
+ @Documented
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({
+ ELEMENT_TYPE_UNKNOWN,
+ ELEMENT_TYPE_MASTER,
+ ELEMENT_TYPE_UNSIGNED_INT,
+ ELEMENT_TYPE_STRING,
+ ELEMENT_TYPE_BINARY,
+ ELEMENT_TYPE_FLOAT
+ })
+ @interface ElementType {}
+ /** Type for unknown elements. */
+ int ELEMENT_TYPE_UNKNOWN = 0;
+ /** Type for elements that contain child elements. */
+ int ELEMENT_TYPE_MASTER = 1;
+ /** Type for integer value elements of up to 8 bytes. */
+ int ELEMENT_TYPE_UNSIGNED_INT = 2;
+ /** Type for string elements. */
+ int ELEMENT_TYPE_STRING = 3;
+ /** Type for binary elements. */
+ int ELEMENT_TYPE_BINARY = 4;
+ /** Type for IEEE floating point value elements of either 4 or 8 bytes. */
+ int ELEMENT_TYPE_FLOAT = 5;
+
+ /**
+ * Maps an element ID to a corresponding type.
+ *
+ * <p>If {@link #ELEMENT_TYPE_UNKNOWN} is returned then the element is skipped. Note that all
+ * children of a skipped element are also skipped.
+ *
+ * @param id The element ID to map.
+ * @return One of {@link #ELEMENT_TYPE_UNKNOWN}, {@link #ELEMENT_TYPE_MASTER}, {@link
+ * #ELEMENT_TYPE_UNSIGNED_INT}, {@link #ELEMENT_TYPE_STRING}, {@link #ELEMENT_TYPE_BINARY} and
+ * {@link #ELEMENT_TYPE_FLOAT}.
+ */
+ @ElementType
+ int getElementType(int id);
+
+ /**
+ * Checks if the given id is that of a level 1 element.
+ *
+ * @param id The element ID.
+ * @return Whether the given id is that of a level 1 element.
+ */
+ boolean isLevel1Element(int id);
+
+ /**
+ * Called when the start of a master element is encountered.
+ * <p>
+ * Following events should be considered as taking place within this element until a matching call
+ * to {@link #endMasterElement(int)} is made.
+ * <p>
+ * Note that it is possible for another master element of the same element ID to be nested within
+ * itself.
+ *
+ * @param id The element ID.
+ * @param contentPosition The position of the start of the element's content in the stream.
+ * @param contentSize The size of the element's content in bytes.
+ * @throws ParserException If a parsing error occurs.
+ */
+ void startMasterElement(int id, long contentPosition, long contentSize) throws ParserException;
+
+ /**
+ * Called when the end of a master element is encountered.
+ *
+ * @param id The element ID.
+ * @throws ParserException If a parsing error occurs.
+ */
+ void endMasterElement(int id) throws ParserException;
+
+ /**
+ * Called when an integer element is encountered.
+ *
+ * @param id The element ID.
+ * @param value The integer value that the element contains.
+ * @throws ParserException If a parsing error occurs.
+ */
+ void integerElement(int id, long value) throws ParserException;
+
+ /**
+ * Called when a float element is encountered.
+ *
+ * @param id The element ID.
+ * @param value The float value that the element contains
+ * @throws ParserException If a parsing error occurs.
+ */
+ void floatElement(int id, double value) throws ParserException;
+
+ /**
+ * Called when a string element is encountered.
+ *
+ * @param id The element ID.
+ * @param value The string value that the element contains.
+ * @throws ParserException If a parsing error occurs.
+ */
+ void stringElement(int id, String value) throws ParserException;
+
+ /**
+ * Called when a binary element is encountered.
+ * <p>
+ * The element header (containing the element ID and content size) will already have been read.
+ * Implementations are required to consume the whole remainder of the element, which is
+ * {@code contentSize} bytes in length, before returning. Implementations are permitted to fail
+ * (by throwing an exception) having partially consumed the data, however if they do this, they
+ * must consume the remainder of the content when called again.
+ *
+ * @param id The element ID.
+ * @param contentsSize The element's content size.
+ * @param input The {@link ExtractorInput} from which data should be read.
+ * @throws ParserException If a parsing error occurs.
+ * @throws IOException If an error occurs reading from the input.
+ * @throws InterruptedException If the thread is interrupted.
+ */
+ void binaryElement(int id, int contentsSize, ExtractorInput input)
+ throws IOException, InterruptedException;
+
+}