summaryrefslogtreecommitdiffstats
path: root/mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer.java
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer.java
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer.java')
-rw-r--r--mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer.java109
1 files changed, 109 insertions, 0 deletions
diff --git a/mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer.java b/mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer.java
new file mode 100644
index 0000000000..4941aa29a0
--- /dev/null
+++ b/mobile/android/exoplayer2/src/main/java/org/mozilla/thirdparty/com/google/android/exoplayer2/extractor/ts/NalUnitTargetBuffer.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2016 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.ts;
+
+import org.mozilla.thirdparty.com.google.android.exoplayer2.util.Assertions;
+import java.util.Arrays;
+
+/**
+ * A buffer that fills itself with data corresponding to a specific NAL unit, as it is
+ * encountered in the stream.
+ */
+/* package */ final class NalUnitTargetBuffer {
+
+ private final int targetType;
+
+ private boolean isFilling;
+ private boolean isCompleted;
+
+ public byte[] nalData;
+ public int nalLength;
+
+ public NalUnitTargetBuffer(int targetType, int initialCapacity) {
+ this.targetType = targetType;
+
+ // Initialize data with a start code in the first three bytes.
+ nalData = new byte[3 + initialCapacity];
+ nalData[2] = 1;
+ }
+
+ /**
+ * Resets the buffer, clearing any data that it holds.
+ */
+ public void reset() {
+ isFilling = false;
+ isCompleted = false;
+ }
+
+ /**
+ * Returns whether the buffer currently holds a complete NAL unit of the target type.
+ */
+ public boolean isCompleted() {
+ return isCompleted;
+ }
+
+ /**
+ * Called to indicate that a NAL unit has started.
+ *
+ * @param type The type of the NAL unit.
+ */
+ public void startNalUnit(int type) {
+ Assertions.checkState(!isFilling);
+ isFilling = type == targetType;
+ if (isFilling) {
+ // Skip the three byte start code when writing data.
+ nalLength = 3;
+ isCompleted = false;
+ }
+ }
+
+ /**
+ * Called to pass stream data. The data passed should not include the 3 byte start code.
+ *
+ * @param data Holds the data being passed.
+ * @param offset The offset of the data in {@code data}.
+ * @param limit The limit (exclusive) of the data in {@code data}.
+ */
+ public void appendToNalUnit(byte[] data, int offset, int limit) {
+ if (!isFilling) {
+ return;
+ }
+ int readLength = limit - offset;
+ if (nalData.length < nalLength + readLength) {
+ nalData = Arrays.copyOf(nalData, (nalLength + readLength) * 2);
+ }
+ System.arraycopy(data, offset, nalData, nalLength, readLength);
+ nalLength += readLength;
+ }
+
+ /**
+ * Called to indicate that a NAL unit has ended.
+ *
+ * @param discardPadding The number of excess bytes that were passed to
+ * {@link #appendToNalUnit(byte[], int, int)}, which should be discarded.
+ * @return Whether the ended NAL unit is of the target type.
+ */
+ public boolean endNalUnit(int discardPadding) {
+ if (!isFilling) {
+ return false;
+ }
+ nalLength -= discardPadding;
+ isFilling = false;
+ isCompleted = true;
+ return true;
+ }
+
+}