diff --git a/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacExtractor.java b/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacExtractor.java index 615b60c3e72..0ac4dbeffa2 100644 --- a/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacExtractor.java +++ b/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacExtractor.java @@ -210,7 +210,7 @@ private void decodeStreamMetadata(ExtractorInput input) throws IOException { if (this.streamMetadata == null) { this.streamMetadata = streamMetadata; outputBuffer.reset(streamMetadata.getMaxDecodedFrameSize()); - outputFrameHolder = new OutputFrameHolder(ByteBuffer.wrap(outputBuffer.data)); + outputFrameHolder = new OutputFrameHolder(ByteBuffer.wrap(outputBuffer.getData())); binarySearchSeeker = outputSeekMap( flacDecoderJni, diff --git a/library/common/src/main/java/com/google/android/exoplayer2/audio/Ac4Util.java b/library/common/src/main/java/com/google/android/exoplayer2/audio/Ac4Util.java index 2e4367f4e2d..96712f04cbd 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/audio/Ac4Util.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/audio/Ac4Util.java @@ -223,13 +223,14 @@ public static int parseAc4SyncframeAudioSampleCount(ByteBuffer buffer) { public static void getAc4SampleHeader(int size, ParsableByteArray buffer) { // See ETSI TS 103 190-1 V1.3.1, Annex G. buffer.reset(SAMPLE_HEADER_SIZE); - buffer.data[0] = (byte) 0xAC; - buffer.data[1] = 0x40; - buffer.data[2] = (byte) 0xFF; - buffer.data[3] = (byte) 0xFF; - buffer.data[4] = (byte) ((size >> 16) & 0xFF); - buffer.data[5] = (byte) ((size >> 8) & 0xFF); - buffer.data[6] = (byte) (size & 0xFF); + byte[] data = buffer.getData(); + data[0] = (byte) 0xAC; + data[1] = 0x40; + data[2] = (byte) 0xFF; + data[3] = (byte) 0xFF; + data[4] = (byte) ((size >> 16) & 0xFF); + data[5] = (byte) ((size >> 8) & 0xFF); + data[6] = (byte) (size & 0xFF); } private static int readVariableBits(ParsableBitArray data, int bitsPerRead) { diff --git a/library/common/src/main/java/com/google/android/exoplayer2/metadata/emsg/EventMessageDecoder.java b/library/common/src/main/java/com/google/android/exoplayer2/metadata/emsg/EventMessageDecoder.java index 8d4f52ab483..8a7e1851c6b 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/metadata/emsg/EventMessageDecoder.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/metadata/emsg/EventMessageDecoder.java @@ -38,7 +38,7 @@ public EventMessage decode(ParsableByteArray emsgData) { long durationMs = emsgData.readUnsignedInt(); long id = emsgData.readUnsignedInt(); byte[] messageData = - Arrays.copyOfRange(emsgData.data, emsgData.getPosition(), emsgData.limit()); + Arrays.copyOfRange(emsgData.getData(), emsgData.getPosition(), emsgData.limit()); return new EventMessage(schemeIdUri, value, durationMs, id, messageData); } } diff --git a/library/common/src/main/java/com/google/android/exoplayer2/metadata/id3/Id3Decoder.java b/library/common/src/main/java/com/google/android/exoplayer2/metadata/id3/Id3Decoder.java index 904ac207399..f660e21bfda 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/metadata/id3/Id3Decoder.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/metadata/id3/Id3Decoder.java @@ -601,9 +601,10 @@ private static ChapterFrame decodeChapterFrame( @Nullable FramePredicate framePredicate) throws UnsupportedEncodingException { int framePosition = id3Data.getPosition(); - int chapterIdEndIndex = indexOfZeroByte(id3Data.data, framePosition); - String chapterId = new String(id3Data.data, framePosition, chapterIdEndIndex - framePosition, - "ISO-8859-1"); + int chapterIdEndIndex = indexOfZeroByte(id3Data.getData(), framePosition); + String chapterId = + new String( + id3Data.getData(), framePosition, chapterIdEndIndex - framePosition, "ISO-8859-1"); id3Data.setPosition(chapterIdEndIndex + 1); int startTime = id3Data.readInt(); @@ -640,9 +641,10 @@ private static ChapterTocFrame decodeChapterTOCFrame( @Nullable FramePredicate framePredicate) throws UnsupportedEncodingException { int framePosition = id3Data.getPosition(); - int elementIdEndIndex = indexOfZeroByte(id3Data.data, framePosition); - String elementId = new String(id3Data.data, framePosition, elementIdEndIndex - framePosition, - "ISO-8859-1"); + int elementIdEndIndex = indexOfZeroByte(id3Data.getData(), framePosition); + String elementId = + new String( + id3Data.getData(), framePosition, elementIdEndIndex - framePosition, "ISO-8859-1"); id3Data.setPosition(elementIdEndIndex + 1); int ctocFlags = id3Data.readUnsignedByte(); @@ -653,8 +655,8 @@ private static ChapterTocFrame decodeChapterTOCFrame( String[] children = new String[childCount]; for (int i = 0; i < childCount; i++) { int startIndex = id3Data.getPosition(); - int endIndex = indexOfZeroByte(id3Data.data, startIndex); - children[i] = new String(id3Data.data, startIndex, endIndex - startIndex, "ISO-8859-1"); + int endIndex = indexOfZeroByte(id3Data.getData(), startIndex); + children[i] = new String(id3Data.getData(), startIndex, endIndex - startIndex, "ISO-8859-1"); id3Data.setPosition(endIndex + 1); } @@ -721,7 +723,7 @@ private static BinaryFrame decodeBinaryFrame(ParsableByteArray id3Data, int fram * @return The length of the data after processing. */ private static int removeUnsynchronization(ParsableByteArray data, int length) { - byte[] bytes = data.data; + byte[] bytes = data.getData(); int startPosition = data.getPosition(); for (int i = startPosition; i + 1 < startPosition + length; i++) { if ((bytes[i] & 0xFF) == 0xFF && bytes[i + 1] == 0x00) { diff --git a/library/common/src/main/java/com/google/android/exoplayer2/util/ParsableBitArray.java b/library/common/src/main/java/com/google/android/exoplayer2/util/ParsableBitArray.java index 4f6f583528c..a91e41a58a3 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/util/ParsableBitArray.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/util/ParsableBitArray.java @@ -72,7 +72,7 @@ public void reset(byte[] data) { * @param parsableByteArray The {@link ParsableByteArray}. */ public void reset(ParsableByteArray parsableByteArray) { - reset(parsableByteArray.data, parsableByteArray.limit()); + reset(parsableByteArray.getData(), parsableByteArray.limit()); setPosition(parsableByteArray.getPosition() * 8); } diff --git a/library/common/src/main/java/com/google/android/exoplayer2/util/ParsableByteArray.java b/library/common/src/main/java/com/google/android/exoplayer2/util/ParsableByteArray.java index e62183f9444..935ce7efdf5 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/util/ParsableByteArray.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/util/ParsableByteArray.java @@ -26,10 +26,8 @@ */ public final class ParsableByteArray { - public byte[] data; - + private byte[] data; private int position; - // TODO(internal b/147657250): Enforce this limit on all read methods. private int limit; @@ -138,13 +136,6 @@ public int getPosition() { return position; } - /** - * Returns the capacity of the array, which may be larger than the limit. - */ - public int capacity() { - return data.length; - } - /** * Sets the reading offset in the array. * @@ -158,6 +149,23 @@ public void setPosition(int position) { this.position = position; } + /** + * Returns the underlying array. + * + *

Changes to this array are reflected in the results of the {@code read...()} methods. + * + *

This reference must be assumed to become invalid when {@link #reset} is called (because the + * array might get reallocated). + */ + public byte[] getData() { + return data; + } + + /** Returns the capacity of the array, which may be larger than the limit. */ + public int capacity() { + return data.length; + } + /** * Moves the reading offset by {@code bytes}. * diff --git a/library/common/src/main/java/com/google/android/exoplayer2/util/Util.java b/library/common/src/main/java/com/google/android/exoplayer2/util/Util.java index 2b24d932329..77dfeca641f 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/util/Util.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/util/Util.java @@ -2046,14 +2046,14 @@ public static boolean inflate( if (input.bytesLeft() <= 0) { return false; } - byte[] outputData = output.data; + byte[] outputData = output.getData(); if (outputData.length < input.bytesLeft()) { outputData = new byte[2 * input.bytesLeft()]; } if (inflater == null) { inflater = new Inflater(); } - inflater.setInput(input.data, input.getPosition(), input.bytesLeft()); + inflater.setInput(input.getData(), input.getPosition(), input.bytesLeft()); try { int outputSize = 0; while (true) { diff --git a/library/common/src/main/java/com/google/android/exoplayer2/video/AvcConfig.java b/library/common/src/main/java/com/google/android/exoplayer2/video/AvcConfig.java index 3886fdfb237..b794d2db905 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/video/AvcConfig.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/video/AvcConfig.java @@ -91,7 +91,7 @@ private static byte[] buildNalUnitForChild(ParsableByteArray data) { int length = data.readUnsignedShort(); int offset = data.getPosition(); data.skipBytes(length); - return CodecSpecificDataUtil.buildNalUnit(data.data, offset, length); + return CodecSpecificDataUtil.buildNalUnit(data.getData(), offset, length); } } diff --git a/library/common/src/main/java/com/google/android/exoplayer2/video/HevcConfig.java b/library/common/src/main/java/com/google/android/exoplayer2/video/HevcConfig.java index bb11ef0005b..100a824a970 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/video/HevcConfig.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/video/HevcConfig.java @@ -69,8 +69,8 @@ public static HevcConfig parse(ParsableByteArray data) throws ParserException { System.arraycopy(NalUnitUtil.NAL_START_CODE, 0, buffer, bufferPosition, NalUnitUtil.NAL_START_CODE.length); bufferPosition += NalUnitUtil.NAL_START_CODE.length; - System - .arraycopy(data.data, data.getPosition(), buffer, bufferPosition, nalUnitLength); + System.arraycopy( + data.getData(), data.getPosition(), buffer, bufferPosition, nalUnitLength); bufferPosition += nalUnitLength; data.skipBytes(nalUnitLength); } diff --git a/library/common/src/test/java/com/google/android/exoplayer2/util/ParsableByteArrayTest.java b/library/common/src/test/java/com/google/android/exoplayer2/util/ParsableByteArrayTest.java index 894de47e6ed..919f50fdc55 100644 --- a/library/common/src/test/java/com/google/android/exoplayer2/util/ParsableByteArrayTest.java +++ b/library/common/src/test/java/com/google/android/exoplayer2/util/ParsableByteArrayTest.java @@ -34,7 +34,7 @@ public final class ParsableByteArrayTest { private static ParsableByteArray getTestDataArray() { ParsableByteArray testArray = new ParsableByteArray(TEST_DATA.length); - System.arraycopy(TEST_DATA, 0, testArray.data, 0, TEST_DATA.length); + System.arraycopy(TEST_DATA, 0, testArray.getData(), 0, TEST_DATA.length); return testArray; } @@ -246,7 +246,7 @@ public void modificationsAffectParsableArray() { ParsableByteArray parsableByteArray = getTestDataArray(); // When modifying the wrapped byte array - byte[] data = parsableByteArray.data; + byte[] data = parsableByteArray.getData(); long readValue = parsableByteArray.readUnsignedInt(); data[0] = (byte) (TEST_DATA[0] + 1); parsableByteArray.setPosition(0); @@ -259,7 +259,7 @@ public void readingUnsignedLongWithMsbSetThrows() { ParsableByteArray parsableByteArray = getTestDataArray(); // Given an array with the most-significant bit set on the top byte - byte[] data = parsableByteArray.data; + byte[] data = parsableByteArray.getData(); data[0] = (byte) 0x80; // Then reading an unsigned long throws. try { @@ -291,7 +291,7 @@ public void readingBytesReturnsCopy() { byte[] copy = new byte[length]; parsableByteArray.readBytes(copy, 0, length); // Then the array elements are the same. - assertThat(copy).isEqualTo(parsableByteArray.data); + assertThat(copy).isEqualTo(parsableByteArray.getData()); } @Test diff --git a/library/common/src/test/java/com/google/android/exoplayer2/util/UtilTest.java b/library/common/src/test/java/com/google/android/exoplayer2/util/UtilTest.java index 0392e03841e..f265c3ccb75 100644 --- a/library/common/src/test/java/com/google/android/exoplayer2/util/UtilTest.java +++ b/library/common/src/test/java/com/google/android/exoplayer2/util/UtilTest.java @@ -873,7 +873,7 @@ public void inflate_withDeflatedData_success() { ParsableByteArray output = new ParsableByteArray(); assertThat(Util.inflate(input, output, /* inflater= */ null)).isTrue(); assertThat(output.limit()).isEqualTo(testData.length); - assertThat(Arrays.copyOf(output.data, output.limit())).isEqualTo(testData); + assertThat(Arrays.copyOf(output.getData(), output.limit())).isEqualTo(testData); } // TODO: Revert to @Config(sdk = Config.ALL_SDKS) once b/143232359 is resolved diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/SampleDataQueue.java b/library/core/src/main/java/com/google/android/exoplayer2/source/SampleDataQueue.java index 7fd95df34f7..479c8f3eee4 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/SampleDataQueue.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/SampleDataQueue.java @@ -127,7 +127,7 @@ public void readToBuffer(DecoderInputBuffer buffer, SampleExtrasHolder extrasHol if (buffer.hasSupplementalData()) { // If there is supplemental data, the sample data is prefixed by its size. scratch.reset(4); - readData(extrasHolder.offset, scratch.data, 4); + readData(extrasHolder.offset, scratch.getData(), 4); int sampleSize = scratch.readUnsignedIntToInt(); extrasHolder.offset += 4; extrasHolder.size -= 4; @@ -223,9 +223,9 @@ private void readEncryptionData(DecoderInputBuffer buffer, SampleExtrasHolder ex // Read the signal byte. scratch.reset(1); - readData(offset, scratch.data, 1); + readData(offset, scratch.getData(), 1); offset++; - byte signalByte = scratch.data[0]; + byte signalByte = scratch.getData()[0]; boolean subsampleEncryption = (signalByte & 0x80) != 0; int ivSize = signalByte & 0x7F; @@ -244,7 +244,7 @@ private void readEncryptionData(DecoderInputBuffer buffer, SampleExtrasHolder ex int subsampleCount; if (subsampleEncryption) { scratch.reset(2); - readData(offset, scratch.data, 2); + readData(offset, scratch.getData(), 2); offset += 2; subsampleCount = scratch.readUnsignedShort(); } else { @@ -263,7 +263,7 @@ private void readEncryptionData(DecoderInputBuffer buffer, SampleExtrasHolder ex if (subsampleEncryption) { int subsampleDataLength = 6 * subsampleCount; scratch.reset(subsampleDataLength); - readData(offset, scratch.data, subsampleDataLength); + readData(offset, scratch.getData(), subsampleDataLength); offset += subsampleDataLength; scratch.setPosition(0); for (int i = 0; i < subsampleCount; i++) { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/text/pgs/PgsDecoder.java b/library/core/src/main/java/com/google/android/exoplayer2/text/pgs/PgsDecoder.java index fe8bf12d476..6e126c677bf 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/text/pgs/PgsDecoder.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/text/pgs/PgsDecoder.java @@ -72,7 +72,7 @@ private void maybeInflateData(ParsableByteArray buffer) { inflater = new Inflater(); } if (Util.inflate(buffer, inflatedBuffer, inflater)) { - buffer.reset(inflatedBuffer.data, inflatedBuffer.limit()); + buffer.reset(inflatedBuffer.getData(), inflatedBuffer.limit()); } // else assume data is not compressed. } } @@ -183,7 +183,7 @@ private void parseBitmapSection(ParsableByteArray buffer, int sectionLength) { int limit = bitmapData.limit(); if (position < limit && sectionLength > 0) { int bytesToRead = Math.min(sectionLength, limit - position); - buffer.readBytes(bitmapData.data, position, bytesToRead); + buffer.readBytes(bitmapData.getData(), position, bytesToRead); bitmapData.setPosition(position + bytesToRead); } } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/text/webvtt/CssParser.java b/library/core/src/main/java/com/google/android/exoplayer2/text/webvtt/CssParser.java index 3969f8a5c76..40fb1fcbb2b 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/text/webvtt/CssParser.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/text/webvtt/CssParser.java @@ -78,7 +78,7 @@ public List parseBlock(ParsableByteArray input) { stringBuilder.setLength(0); int initialInputPosition = input.getPosition(); skipStyleBlock(input); - styleInput.reset(input.data, input.getPosition()); + styleInput.reset(input.getData(), input.getPosition()); styleInput.setPosition(initialInputPosition); List styles = new ArrayList<>(); @@ -154,7 +154,7 @@ private static String readCueTarget(ParsableByteArray input) { int limit = input.limit(); boolean cueTargetEndFound = false; while (position < limit && !cueTargetEndFound) { - char c = (char) input.data[position++]; + char c = (char) input.getData()[position++]; cueTargetEndFound = c == ')'; } return input.readString(--position - input.getPosition()).trim(); @@ -267,7 +267,7 @@ private static boolean maybeSkipWhitespace(ParsableByteArray input) { } private static char peekCharAtPosition(ParsableByteArray input, int position) { - return (char) input.data[position]; + return (char) input.getData()[position]; } @Nullable @@ -297,7 +297,7 @@ private static String parsePropertyValue(ParsableByteArray input, StringBuilder private static boolean maybeSkipComment(ParsableByteArray input) { int position = input.getPosition(); int limit = input.limit(); - byte[] data = input.data; + byte[] data = input.getData(); if (position + 2 <= limit && data[position++] == '/' && data[position++] == '*') { while (position + 1 < limit) { char skippedChar = (char) data[position++]; @@ -320,7 +320,7 @@ private static String parseIdentifier(ParsableByteArray input, StringBuilder str int limit = input.limit(); boolean identifierEndFound = false; while (position < limit && !identifierEndFound) { - char c = (char) input.data[position]; + char c = (char) input.getData()[position]; if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '#' || c == '-' || c == '.' || c == '_') { position++; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder.java b/library/core/src/main/java/com/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder.java index 82023e6c586..caaa7869ee2 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoder.java @@ -84,7 +84,7 @@ private static Cue parseVttCueBox(ParsableByteArray sampleData, int remainingCue remainingCueBoxBytes -= BOX_HEADER_SIZE; int payloadLength = boxSize - BOX_HEADER_SIZE; String boxPayload = - Util.fromUtf8Bytes(sampleData.data, sampleData.getPosition(), payloadLength); + Util.fromUtf8Bytes(sampleData.getData(), sampleData.getPosition(), payloadLength); sampleData.skipBytes(payloadLength); remainingCueBoxBytes -= payloadLength; if (boxType == TYPE_sttg) { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/video/spherical/ProjectionDecoder.java b/library/core/src/main/java/com/google/android/exoplayer2/video/spherical/ProjectionDecoder.java index 0a75dfce59a..9f7f2362e5b 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/video/spherical/ProjectionDecoder.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/video/spherical/ProjectionDecoder.java @@ -179,7 +179,7 @@ private static boolean isProj(ParsableByteArray input) { final double log2 = Math.log(2.0); int coordinateCountSizeBits = (int) Math.ceil(Math.log(2.0 * coordinateCount) / log2); - ParsableBitArray bitInput = new ParsableBitArray(input.data); + ParsableBitArray bitInput = new ParsableBitArray(input.getData()); bitInput.setPosition(input.getPosition() * 8); float[] vertices = new float[vertexCount * 5]; int[] coordinateIndices = new int[5]; diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/FlacFrameReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/FlacFrameReader.java index 264c6d7b0d6..fc1b1213260 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/FlacFrameReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/FlacFrameReader.java @@ -107,10 +107,11 @@ public static boolean checkFrameHeaderFromPeek( ParsableByteArray scratch = new ParsableByteArray(FlacConstants.MAX_FRAME_HEADER_SIZE); System.arraycopy( - frameStartBytes, /* srcPos= */ 0, scratch.data, /* destPos= */ 0, /* length= */ 2); + frameStartBytes, /* srcPos= */ 0, scratch.getData(), /* destPos= */ 0, /* length= */ 2); int totalBytesPeeked = - ExtractorUtil.peekToLength(input, scratch.data, 2, FlacConstants.MAX_FRAME_HEADER_SIZE - 2); + ExtractorUtil.peekToLength( + input, scratch.getData(), 2, FlacConstants.MAX_FRAME_HEADER_SIZE - 2); scratch.setLimit(totalBytesPeeked); input.resetPeekPosition(); @@ -145,7 +146,7 @@ public static long getFirstSampleNumber( int maxUtf8SampleNumberSize = isBlockSizeVariable ? 7 : 6; ParsableByteArray scratch = new ParsableByteArray(maxUtf8SampleNumberSize); int totalBytesPeeked = - ExtractorUtil.peekToLength(input, scratch.data, 0, maxUtf8SampleNumberSize); + ExtractorUtil.peekToLength(input, scratch.getData(), 0, maxUtf8SampleNumberSize); scratch.setLimit(totalBytesPeeked); input.resetPeekPosition(); @@ -325,7 +326,7 @@ private static boolean checkAndReadCrc(ParsableByteArray data, int frameStartPos int crc = data.readUnsignedByte(); int frameEndPosition = data.getPosition(); int expectedCrc = - Util.crc8(data.data, frameStartPosition, frameEndPosition - 1, /* initialValue= */ 0); + Util.crc8(data.getData(), frameStartPosition, frameEndPosition - 1, /* initialValue= */ 0); return crc == expectedCrc; } diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/FlacMetadataReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/FlacMetadataReader.java index 8f9fafe13cf..922ef0f3da2 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/FlacMetadataReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/FlacMetadataReader.java @@ -79,7 +79,7 @@ public static Metadata peekId3Metadata(ExtractorInput input, boolean parseData) */ public static boolean checkAndPeekStreamMarker(ExtractorInput input) throws IOException { ParsableByteArray scratch = new ParsableByteArray(FlacConstants.STREAM_MARKER_SIZE); - input.peekFully(scratch.data, 0, FlacConstants.STREAM_MARKER_SIZE); + input.peekFully(scratch.getData(), 0, FlacConstants.STREAM_MARKER_SIZE); return scratch.readUnsignedInt() == STREAM_MARKER; } @@ -118,7 +118,7 @@ public static Metadata readId3Metadata(ExtractorInput input, boolean parseData) */ public static void readStreamMarker(ExtractorInput input) throws IOException { ParsableByteArray scratch = new ParsableByteArray(FlacConstants.STREAM_MARKER_SIZE); - input.readFully(scratch.data, 0, FlacConstants.STREAM_MARKER_SIZE); + input.readFully(scratch.getData(), 0, FlacConstants.STREAM_MARKER_SIZE); if (scratch.readUnsignedInt() != STREAM_MARKER) { throw new ParserException("Failed to read FLAC stream marker."); } @@ -228,7 +228,7 @@ public static FlacStreamMetadata.SeekTable readSeekTableMetadataBlock(ParsableBy public static int getFrameStartMarker(ExtractorInput input) throws IOException { input.resetPeekPosition(); ParsableByteArray scratch = new ParsableByteArray(2); - input.peekFully(scratch.data, 0, 2); + input.peekFully(scratch.getData(), 0, 2); int frameStartMarker = scratch.readUnsignedShort(); int syncCode = frameStartMarker >> 2; @@ -251,14 +251,14 @@ private static FlacStreamMetadata readStreamInfoBlock(ExtractorInput input) thro private static FlacStreamMetadata.SeekTable readSeekTableMetadataBlock( ExtractorInput input, int length) throws IOException { ParsableByteArray scratch = new ParsableByteArray(length); - input.readFully(scratch.data, 0, length); + input.readFully(scratch.getData(), 0, length); return readSeekTableMetadataBlock(scratch); } private static List readVorbisCommentMetadataBlock(ExtractorInput input, int length) throws IOException { ParsableByteArray scratch = new ParsableByteArray(length); - input.readFully(scratch.data, 0, length); + input.readFully(scratch.getData(), 0, length); scratch.skipBytes(FlacConstants.METADATA_BLOCK_HEADER_SIZE); CommentHeader commentHeader = VorbisUtil.readVorbisCommentHeader( @@ -269,7 +269,7 @@ private static List readVorbisCommentMetadataBlock(ExtractorInput input, private static PictureFrame readPictureMetadataBlock(ExtractorInput input, int length) throws IOException { ParsableByteArray scratch = new ParsableByteArray(length); - input.readFully(scratch.data, 0, length); + input.readFully(scratch.getData(), 0, length); scratch.skipBytes(FlacConstants.METADATA_BLOCK_HEADER_SIZE); int pictureType = scratch.readInt(); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/Id3Peeker.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/Id3Peeker.java index cda6a805f55..3c78f7a7ddf 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/Id3Peeker.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/Id3Peeker.java @@ -52,7 +52,7 @@ public Metadata peekId3Data( @Nullable Metadata metadata = null; while (true) { try { - input.peekFully(scratch.data, /* offset= */ 0, Id3Decoder.ID3_HEADER_LENGTH); + input.peekFully(scratch.getData(), /* offset= */ 0, Id3Decoder.ID3_HEADER_LENGTH); } catch (EOFException e) { // If input has less than ID3_HEADER_LENGTH, ignore the rest. break; @@ -68,7 +68,7 @@ public Metadata peekId3Data( if (metadata == null) { byte[] id3Data = new byte[tagLength]; - System.arraycopy(scratch.data, 0, id3Data, 0, Id3Decoder.ID3_HEADER_LENGTH); + System.arraycopy(scratch.getData(), 0, id3Data, 0, Id3Decoder.ID3_HEADER_LENGTH); input.peekFully(id3Data, Id3Decoder.ID3_HEADER_LENGTH, framesLength); metadata = new Id3Decoder(id3FramePredicate).decode(id3Data, tagLength); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/VorbisUtil.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/VorbisUtil.java index 67d469b759d..ede2ab39e99 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/VorbisUtil.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/VorbisUtil.java @@ -173,7 +173,7 @@ public static VorbisIdHeader readVorbisIdentificationHeader(ParsableByteArray he boolean framingFlag = (headerData.readUnsignedByte() & 0x01) > 0; // raw data of Vorbis setup header has to be passed to decoder as CSD buffer #1 - byte[] data = Arrays.copyOf(headerData.data, headerData.limit()); + byte[] data = Arrays.copyOf(headerData.getData(), headerData.limit()); return new VorbisIdHeader( version, @@ -309,7 +309,7 @@ public static Mode[] readVorbisModes(ParsableByteArray headerData, int channels) int numberOfBooks = headerData.readUnsignedByte() + 1; - VorbisBitArray bitArray = new VorbisBitArray(headerData.data); + VorbisBitArray bitArray = new VorbisBitArray(headerData.getData()); bitArray.skipBits(headerData.getPosition() * 8); for (int i = 0; i < numberOfBooks; i++) { diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flac/FlacExtractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flac/FlacExtractor.java index 6ca5e3fe5ab..a9bba06c2c6 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flac/FlacExtractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flac/FlacExtractor.java @@ -265,7 +265,9 @@ private void getFrameStartMarker(ExtractorInput input) throws IOException { if (currentLimit < BUFFER_LENGTH) { int bytesRead = input.read( - buffer.data, /* offset= */ currentLimit, /* length= */ BUFFER_LENGTH - currentLimit); + buffer.getData(), + /* offset= */ currentLimit, + /* length= */ BUFFER_LENGTH - currentLimit); foundEndOfInput = bytesRead == C.RESULT_END_OF_INPUT; if (!foundEndOfInput) { buffer.setLimit(currentLimit + bytesRead); @@ -300,7 +302,11 @@ private void getFrameStartMarker(ExtractorInput input) throws IOException { // The next frame header may not fit in the rest of the buffer, so put the trailing bytes at // the start of the buffer, and reset the position and limit. System.arraycopy( - buffer.data, buffer.getPosition(), buffer.data, /* destPos= */ 0, buffer.bytesLeft()); + buffer.getData(), + buffer.getPosition(), + buffer.getData(), + /* destPos= */ 0, + buffer.bytesLeft()); buffer.reset(buffer.bytesLeft()); } diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flv/FlvExtractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flv/FlvExtractor.java index 98c5fa73a49..ff3cda63ab8 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flv/FlvExtractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flv/FlvExtractor.java @@ -98,21 +98,21 @@ public FlvExtractor() { @Override public boolean sniff(ExtractorInput input) throws IOException { // Check if file starts with "FLV" tag - input.peekFully(scratch.data, 0, 3); + input.peekFully(scratch.getData(), 0, 3); scratch.setPosition(0); if (scratch.readUnsignedInt24() != FLV_TAG) { return false; } // Checking reserved flags are set to 0 - input.peekFully(scratch.data, 0, 2); + input.peekFully(scratch.getData(), 0, 2); scratch.setPosition(0); if ((scratch.readUnsignedShort() & 0xFA) != 0) { return false; } // Read data offset - input.peekFully(scratch.data, 0, 4); + input.peekFully(scratch.getData(), 0, 4); scratch.setPosition(0); int dataOffset = scratch.readInt(); @@ -120,7 +120,7 @@ public boolean sniff(ExtractorInput input) throws IOException { input.advancePeekPosition(dataOffset); // Checking first "previous tag size" is set to 0 - input.peekFully(scratch.data, 0, 4); + input.peekFully(scratch.getData(), 0, 4); scratch.setPosition(0); return scratch.readInt() == 0; @@ -182,7 +182,7 @@ public int read(ExtractorInput input, PositionHolder seekPosition) throws IOExce */ @RequiresNonNull("extractorOutput") private boolean readFlvHeader(ExtractorInput input) throws IOException { - if (!input.readFully(headerBuffer.data, 0, FLV_HEADER_SIZE, true)) { + if (!input.readFully(headerBuffer.getData(), 0, FLV_HEADER_SIZE, true)) { // We've reached the end of the stream. return false; } @@ -228,7 +228,7 @@ private void skipToTagHeader(ExtractorInput input) throws IOException { * @throws IOException If an error occurred reading or parsing data from the source. */ private boolean readTagHeader(ExtractorInput input) throws IOException { - if (!input.readFully(tagHeaderBuffer.data, 0, FLV_TAG_HEADER_SIZE, true)) { + if (!input.readFully(tagHeaderBuffer.getData(), 0, FLV_TAG_HEADER_SIZE, true)) { // We've reached the end of the stream. return false; } @@ -289,7 +289,7 @@ private ParsableByteArray prepareTagData(ExtractorInput input) throws IOExceptio tagData.setPosition(0); } tagData.setLimit(tagDataSize); - input.readFully(tagData.data, 0, tagDataSize); + input.readFully(tagData.getData(), 0, tagDataSize); return tagData; } diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader.java index 806cc9fad44..c6e654dd804 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader.java @@ -126,7 +126,7 @@ private static String readAmfString(ParsableByteArray data) { int size = data.readUnsignedShort(); int position = data.getPosition(); data.skipBytes(size); - return new String(data.data, position, size); + return new String(data.getData(), position, size); } /** diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader.java index 891b228dbb8..c91f6ce0371 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flv/VideoTagPayloadReader.java @@ -86,7 +86,7 @@ protected boolean parsePayload(ParsableByteArray data, long timeUs) throws Parse // Parse avc sequence header in case this was not done before. if (packetType == AVC_PACKET_TYPE_SEQUENCE_HEADER && !hasOutputFormat) { ParsableByteArray videoSequence = new ParsableByteArray(new byte[data.bytesLeft()]); - data.readBytes(videoSequence.data, 0, data.bytesLeft()); + data.readBytes(videoSequence.getData(), 0, data.bytesLeft()); AvcConfig avcConfig = AvcConfig.parse(videoSequence); nalUnitLengthFieldLength = avcConfig.nalUnitLengthFieldLength; // Construct and output the format. @@ -109,7 +109,7 @@ protected boolean parsePayload(ParsableByteArray data, long timeUs) throws Parse // TODO: Deduplicate with Mp4Extractor. // Zero the top three bytes of the array that we'll use to decode nal unit lengths, in case // they're only 1 or 2 bytes long. - byte[] nalLengthData = nalLength.data; + byte[] nalLengthData = nalLength.getData(); nalLengthData[0] = 0; nalLengthData[1] = 0; nalLengthData[2] = 0; @@ -121,7 +121,7 @@ protected boolean parsePayload(ParsableByteArray data, long timeUs) throws Parse int bytesToWrite; while (data.bytesLeft() > 0) { // Read the NAL length so that we know where we find the next one. - data.readBytes(nalLength.data, nalUnitLengthFieldLengthDiff, nalUnitLengthFieldLength); + data.readBytes(nalLength.getData(), nalUnitLengthFieldLengthDiff, nalUnitLengthFieldLength); nalLength.setPosition(0); bytesToWrite = nalLength.readUnsignedIntToInt(); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java index 0d3965321ca..f6554bb48cb 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java @@ -1068,8 +1068,8 @@ protected void stringElement(int id, String value) throws ParserException { protected void binaryElement(int id, int contentSize, ExtractorInput input) throws IOException { switch (id) { case ID_SEEK_ID: - Arrays.fill(seekEntryIdBytes.data, (byte) 0); - input.readFully(seekEntryIdBytes.data, 4 - contentSize, contentSize); + Arrays.fill(seekEntryIdBytes.getData(), (byte) 0); + input.readFully(seekEntryIdBytes.getData(), 4 - contentSize, contentSize); seekEntryIdBytes.setPosition(0); seekEntryId = (int) seekEntryIdBytes.readUnsignedInt(); break; @@ -1119,7 +1119,7 @@ protected void binaryElement(int id, int contentSize, ExtractorInput input) thro if (blockState == BLOCK_STATE_HEADER) { // Read the relative timecode (2 bytes) and flags (1 byte). readScratch(input, 3); - int lacing = (scratch.data[2] & 0x06) >> 1; + int lacing = (scratch.getData()[2] & 0x06) >> 1; if (lacing == LACING_NONE) { blockSampleCount = 1; blockSampleSizes = ensureArrayCapacity(blockSampleSizes, 1); @@ -1127,7 +1127,7 @@ protected void binaryElement(int id, int contentSize, ExtractorInput input) thro } else { // Read the sample count (1 byte). readScratch(input, 4); - blockSampleCount = (scratch.data[3] & 0xFF) + 1; + blockSampleCount = (scratch.getData()[3] & 0xFF) + 1; blockSampleSizes = ensureArrayCapacity(blockSampleSizes, blockSampleCount); if (lacing == LACING_FIXED_SIZE) { int blockLacingSampleSize = @@ -1141,7 +1141,7 @@ protected void binaryElement(int id, int contentSize, ExtractorInput input) thro int byteValue; do { readScratch(input, ++headerSize); - byteValue = scratch.data[headerSize - 1] & 0xFF; + byteValue = scratch.getData()[headerSize - 1] & 0xFF; blockSampleSizes[sampleIndex] += byteValue; } while (byteValue == 0xFF); totalSamplesSize += blockSampleSizes[sampleIndex]; @@ -1154,20 +1154,20 @@ protected void binaryElement(int id, int contentSize, ExtractorInput input) thro for (int sampleIndex = 0; sampleIndex < blockSampleCount - 1; sampleIndex++) { blockSampleSizes[sampleIndex] = 0; readScratch(input, ++headerSize); - if (scratch.data[headerSize - 1] == 0) { + if (scratch.getData()[headerSize - 1] == 0) { throw new ParserException("No valid varint length mask found"); } long readValue = 0; for (int i = 0; i < 8; i++) { int lengthMask = 1 << (7 - i); - if ((scratch.data[headerSize - 1] & lengthMask) != 0) { + if ((scratch.getData()[headerSize - 1] & lengthMask) != 0) { int readPosition = headerSize - 1; headerSize += i; readScratch(input, headerSize); - readValue = (scratch.data[readPosition++] & 0xFF) & ~lengthMask; + readValue = (scratch.getData()[readPosition++] & 0xFF) & ~lengthMask; while (readPosition < headerSize) { readValue <<= 8; - readValue |= (scratch.data[readPosition++] & 0xFF); + readValue |= (scratch.getData()[readPosition++] & 0xFF); } // The first read value is the first size. Later values are signed offsets. if (sampleIndex > 0) { @@ -1194,10 +1194,11 @@ protected void binaryElement(int id, int contentSize, ExtractorInput input) thro } } - int timecode = (scratch.data[0] << 8) | (scratch.data[1] & 0xFF); + int timecode = (scratch.getData()[0] << 8) | (scratch.getData()[1] & 0xFF); blockTimeUs = clusterTimecodeUs + scaleTimecodeToUs(timecode); - boolean isKeyframe = track.type == TRACK_TYPE_AUDIO - || (id == ID_SIMPLE_BLOCK && (scratch.data[2] & 0x80) == 0x80); + boolean isKeyframe = + track.type == TRACK_TYPE_AUDIO + || (id == ID_SIMPLE_BLOCK && (scratch.getData()[2] & 0x80) == 0x80); blockFlags = isKeyframe ? C.BUFFER_FLAG_KEY_FRAME : 0; blockState = BLOCK_STATE_DATA; blockSampleIndex = 0; @@ -1246,7 +1247,7 @@ protected void handleBlockAdditionalData( if (blockAdditionalId == BLOCK_ADDITIONAL_ID_VP9_ITU_T_35 && CODEC_ID_VP9.equals(track.codecId)) { blockAdditionalData.reset(contentSize); - input.readFully(blockAdditionalData.data, 0, contentSize); + input.readFully(blockAdditionalData.getData(), 0, contentSize); } else { // Unhandled block additional data. input.skipFully(contentSize); @@ -1264,7 +1265,7 @@ private void commitSampleToOutput( } else if (blockDurationUs == C.TIME_UNSET) { Log.w(TAG, "Skipping subtitle sample with no duration."); } else { - setSubtitleEndTime(track.codecId, blockDurationUs, subtitleSample.data); + setSubtitleEndTime(track.codecId, blockDurationUs, subtitleSample.getData()); // Note: If we ever want to support DRM protected subtitles then we'll need to output the // appropriate encryption data here. track.output.sampleData(subtitleSample, subtitleSample.limit()); @@ -1299,10 +1300,11 @@ private void readScratch(ExtractorInput input, int requiredLength) throws IOExce return; } if (scratch.capacity() < requiredLength) { - scratch.reset(Arrays.copyOf(scratch.data, Math.max(scratch.data.length * 2, requiredLength)), + scratch.reset( + Arrays.copyOf(scratch.getData(), Math.max(scratch.getData().length * 2, requiredLength)), scratch.limit()); } - input.readFully(scratch.data, scratch.limit(), requiredLength - scratch.limit()); + input.readFully(scratch.getData(), scratch.limit(), requiredLength - scratch.limit()); scratch.setLimit(requiredLength); } @@ -1331,12 +1333,12 @@ private int writeSampleData(ExtractorInput input, Track track, int size) throws // Clear the encrypted flag. blockFlags &= ~C.BUFFER_FLAG_ENCRYPTED; if (!sampleSignalByteRead) { - input.readFully(scratch.data, 0, 1); + input.readFully(scratch.getData(), 0, 1); sampleBytesRead++; - if ((scratch.data[0] & 0x80) == 0x80) { + if ((scratch.getData()[0] & 0x80) == 0x80) { throw new ParserException("Extension bit is set in signal byte"); } - sampleSignalByte = scratch.data[0]; + sampleSignalByte = scratch.getData()[0]; sampleSignalByteRead = true; } boolean isEncrypted = (sampleSignalByte & 0x01) == 0x01; @@ -1344,11 +1346,12 @@ private int writeSampleData(ExtractorInput input, Track track, int size) throws boolean hasSubsampleEncryption = (sampleSignalByte & 0x02) == 0x02; blockFlags |= C.BUFFER_FLAG_ENCRYPTED; if (!sampleInitializationVectorRead) { - input.readFully(encryptionInitializationVector.data, 0, ENCRYPTION_IV_SIZE); + input.readFully(encryptionInitializationVector.getData(), 0, ENCRYPTION_IV_SIZE); sampleBytesRead += ENCRYPTION_IV_SIZE; sampleInitializationVectorRead = true; // Write the signal byte, containing the IV size and the subsample encryption flag. - scratch.data[0] = (byte) (ENCRYPTION_IV_SIZE | (hasSubsampleEncryption ? 0x80 : 0x00)); + scratch.getData()[0] = + (byte) (ENCRYPTION_IV_SIZE | (hasSubsampleEncryption ? 0x80 : 0x00)); scratch.setPosition(0); output.sampleData(scratch, 1, TrackOutput.SAMPLE_DATA_PART_ENCRYPTION); sampleBytesWritten++; @@ -1362,7 +1365,7 @@ private int writeSampleData(ExtractorInput input, Track track, int size) throws } if (hasSubsampleEncryption) { if (!samplePartitionCountRead) { - input.readFully(scratch.data, 0, 1); + input.readFully(scratch.getData(), 0, 1); sampleBytesRead++; scratch.setPosition(0); samplePartitionCount = scratch.readUnsignedByte(); @@ -1370,7 +1373,7 @@ private int writeSampleData(ExtractorInput input, Track track, int size) throws } int samplePartitionDataSize = samplePartitionCount * 4; scratch.reset(samplePartitionDataSize); - input.readFully(scratch.data, 0, samplePartitionDataSize); + input.readFully(scratch.getData(), 0, samplePartitionDataSize); sampleBytesRead += samplePartitionDataSize; short subsampleCount = (short) (1 + (samplePartitionCount / 2)); int subsampleDataSize = 2 + 6 * subsampleCount; @@ -1423,10 +1426,10 @@ private int writeSampleData(ExtractorInput input, Track track, int size) throws // If there is supplemental data, the structure of the sample data is: // sample size (4 bytes) || sample data || supplemental data scratch.reset(/* limit= */ 4); - scratch.data[0] = (byte) ((size >> 24) & 0xFF); - scratch.data[1] = (byte) ((size >> 16) & 0xFF); - scratch.data[2] = (byte) ((size >> 8) & 0xFF); - scratch.data[3] = (byte) (size & 0xFF); + scratch.getData()[0] = (byte) ((size >> 24) & 0xFF); + scratch.getData()[1] = (byte) ((size >> 16) & 0xFF); + scratch.getData()[2] = (byte) ((size >> 8) & 0xFF); + scratch.getData()[3] = (byte) (size & 0xFF); output.sampleData(scratch, 4, TrackOutput.SAMPLE_DATA_PART_SUPPLEMENTAL); sampleBytesWritten += 4; } @@ -1440,7 +1443,7 @@ private int writeSampleData(ExtractorInput input, Track track, int size) throws // Zero the top three bytes of the array that we'll use to decode nal unit lengths, in case // they're only 1 or 2 bytes long. - byte[] nalLengthData = nalLength.data; + byte[] nalLengthData = nalLength.getData(); nalLengthData[0] = 0; nalLengthData[1] = 0; nalLengthData[2] = 0; @@ -1526,11 +1529,11 @@ private void writeSubtitleSampleData(ExtractorInput input, byte[] samplePrefix, if (subtitleSample.capacity() < sizeWithPrefix) { // Initialize subripSample to contain the required prefix and have space to hold a subtitle // twice as long as this one. - subtitleSample.data = Arrays.copyOf(samplePrefix, sizeWithPrefix + size); + subtitleSample.reset(Arrays.copyOf(samplePrefix, sizeWithPrefix + size)); } else { - System.arraycopy(samplePrefix, 0, subtitleSample.data, 0, samplePrefix.length); + System.arraycopy(samplePrefix, 0, subtitleSample.getData(), 0, samplePrefix.length); } - input.readFully(subtitleSample.data, samplePrefix.length, size); + input.readFully(subtitleSample.getData(), samplePrefix.length, size); subtitleSample.reset(sizeWithPrefix); // Defer writing the data to the track output. We need to modify the sample data by setting // the correct end timecode, which we might not have yet. @@ -2243,7 +2246,7 @@ private byte[] getHdrStaticInfo() { // Search for the initialization data from the end of the BITMAPINFOHEADER. The last 20 // bytes of which are: sizeImage(4), xPel/m (4), yPel/m (4), clrUsed(4), clrImportant(4). int startOffset = buffer.getPosition() + 20; - byte[] bufferData = buffer.data; + byte[] bufferData = buffer.getData(); for (int offset = startOffset; offset < bufferData.length - 4; offset++) { if (bufferData[offset] == 0x00 && bufferData[offset + 1] == 0x00 diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mkv/Sniffer.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mkv/Sniffer.java index d380fa47c71..415d3d45460 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mkv/Sniffer.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mkv/Sniffer.java @@ -45,16 +45,16 @@ public boolean sniff(ExtractorInput input) throws IOException { int bytesToSearch = (int) (inputLength == C.LENGTH_UNSET || inputLength > SEARCH_LENGTH ? SEARCH_LENGTH : inputLength); // Find four bytes equal to ID_EBML near the start of the input. - input.peekFully(scratch.data, 0, 4); + input.peekFully(scratch.getData(), 0, 4); long tag = scratch.readUnsignedInt(); peekLength = 4; while (tag != ID_EBML) { if (++peekLength == bytesToSearch) { return false; } - input.peekFully(scratch.data, 0, 1); + input.peekFully(scratch.getData(), 0, 1); tag = (tag << 8) & 0xFFFFFF00; - tag |= scratch.data[0] & 0xFF; + tag |= scratch.getData()[0] & 0xFF; } // Read the size of the EBML header and make sure it is within the stream. @@ -86,8 +86,8 @@ public boolean sniff(ExtractorInput input) throws IOException { /** Peeks a variable-length unsigned EBML integer from the input. */ private long readUint(ExtractorInput input) throws IOException { - input.peekFully(scratch.data, 0, 1); - int value = scratch.data[0] & 0xFF; + input.peekFully(scratch.getData(), 0, 1); + int value = scratch.getData()[0] & 0xFF; if (value == 0) { return Long.MIN_VALUE; } @@ -98,10 +98,10 @@ private long readUint(ExtractorInput input) throws IOException { length++; } value &= ~mask; - input.peekFully(scratch.data, 1, length); + input.peekFully(scratch.getData(), 1, length); for (int i = 0; i < length; i++) { value <<= 8; - value += scratch.data[i + 1] & 0xFF; + value += scratch.getData()[i + 1] & 0xFF; } peekLength += length + 1; return value; diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp3/Mp3Extractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp3/Mp3Extractor.java index 2e6eb21afb5..59d128ab9b7 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp3/Mp3Extractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp3/Mp3Extractor.java @@ -414,7 +414,7 @@ private boolean peekEndOfStreamOrHeader(ExtractorInput extractorInput) throws IO } try { return !extractorInput.peekFully( - scratch.data, /* offset= */ 0, /* length= */ 4, /* allowEndOfInput= */ true); + scratch.getData(), /* offset= */ 0, /* length= */ 4, /* allowEndOfInput= */ true); } catch (EOFException e) { return true; } @@ -471,7 +471,7 @@ private Seeker computeSeeker(ExtractorInput input) throws IOException { @Nullable private Seeker maybeReadSeekFrame(ExtractorInput input) throws IOException { ParsableByteArray frame = new ParsableByteArray(synchronizedHeader.frameSize); - input.peekFully(frame.data, 0, synchronizedHeader.frameSize); + input.peekFully(frame.getData(), 0, synchronizedHeader.frameSize); int xingBase = (synchronizedHeader.version & 1) != 0 ? (synchronizedHeader.channels != 1 ? 36 : 21) // MPEG 1 : (synchronizedHeader.channels != 1 ? 21 : 13); // MPEG 2 or 2.5 @@ -483,7 +483,7 @@ private Seeker maybeReadSeekFrame(ExtractorInput input) throws IOException { // If there is a Xing header, read gapless playback metadata at a fixed offset. input.resetPeekPosition(); input.advancePeekPosition(xingBase + 141); - input.peekFully(scratch.data, 0, 3); + input.peekFully(scratch.getData(), 0, 3); scratch.setPosition(0); gaplessInfoHolder.setFromXingHeaderValue(scratch.readUnsignedInt24()); } @@ -505,7 +505,7 @@ private Seeker maybeReadSeekFrame(ExtractorInput input) throws IOException { /** Peeks the next frame and returns a {@link ConstantBitrateSeeker} based on its bitrate. */ private Seeker getConstantBitrateSeeker(ExtractorInput input) throws IOException { - input.peekFully(scratch.data, 0, 4); + input.peekFully(scratch.getData(), 0, 4); scratch.setPosition(0); synchronizedHeader.setForHeaderData(scratch.readInt()); return new ConstantBitrateSeeker(input.getLength(), input.getPosition(), synchronizedHeader); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/AtomParsers.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/AtomParsers.java index 1593b90bea6..dd2fc0a5bd4 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/AtomParsers.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/AtomParsers.java @@ -729,7 +729,7 @@ private static TkhdData parseTkhd(ParsableByteArray tkhd) { int durationPosition = tkhd.getPosition(); int durationByteCount = version == 0 ? 4 : 8; for (int i = 0; i < durationByteCount; i++) { - if (tkhd.data[durationPosition + i] != -1) { + if (tkhd.getData()[durationPosition + i] != -1) { durationUnknown = false; break; } @@ -1513,7 +1513,7 @@ private static byte[] parseProjFromParent(ParsableByteArray parent, int position int childAtomSize = parent.readInt(); int childAtomType = parent.readInt(); if (childAtomType == Atom.TYPE_proj) { - return Arrays.copyOfRange(parent.data, childPosition, childPosition + childAtomSize); + return Arrays.copyOfRange(parent.getData(), childPosition, childPosition + childAtomSize); } childPosition += childAtomSize; } diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor.java index 822a9cee907..d4a75312f67 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor.java @@ -346,7 +346,7 @@ private void enterReadingAtomHeaderState() { private boolean readAtomHeader(ExtractorInput input) throws IOException { if (atomHeaderBytesRead == 0) { // Read the standard length atom header. - if (!input.readFully(atomHeader.data, 0, Atom.HEADER_SIZE, true)) { + if (!input.readFully(atomHeader.getData(), 0, Atom.HEADER_SIZE, true)) { return false; } atomHeaderBytesRead = Atom.HEADER_SIZE; @@ -358,7 +358,7 @@ private boolean readAtomHeader(ExtractorInput input) throws IOException { if (atomSize == Atom.DEFINES_LARGE_SIZE) { // Read the large size. int headerBytesRemaining = Atom.LONG_HEADER_SIZE - Atom.HEADER_SIZE; - input.readFully(atomHeader.data, Atom.HEADER_SIZE, headerBytesRemaining); + input.readFully(atomHeader.getData(), Atom.HEADER_SIZE, headerBytesRemaining); atomHeaderBytesRead += headerBytesRemaining; atomSize = atomHeader.readUnsignedLongToLong(); } else if (atomSize == Atom.EXTENDS_TO_END_SIZE) { @@ -421,7 +421,7 @@ private boolean readAtomHeader(ExtractorInput input) throws IOException { throw new ParserException("Leaf atom with length > 2147483647 (unsupported)."); } atomData = new ParsableByteArray((int) atomSize); - System.arraycopy(atomHeader.data, 0, atomData.data, 0, Atom.HEADER_SIZE); + System.arraycopy(atomHeader.getData(), 0, atomData.getData(), 0, Atom.HEADER_SIZE); parserState = STATE_READING_ATOM_PAYLOAD; } else { if (atomSize > Integer.MAX_VALUE) { @@ -437,7 +437,7 @@ private boolean readAtomHeader(ExtractorInput input) throws IOException { private void readAtomPayload(ExtractorInput input) throws IOException { int atomPayloadSize = (int) atomSize - atomHeaderBytesRead; if (atomData != null) { - input.readFully(atomData.data, Atom.HEADER_SIZE, atomPayloadSize); + input.readFully(atomData.getData(), Atom.HEADER_SIZE, atomPayloadSize); onLeafAtomRead(new LeafAtom(atomType, atomData), input.getPosition()); } else { input.skipFully(atomPayloadSize); @@ -1330,7 +1330,7 @@ private boolean readSample(ExtractorInput input) throws IOException { if (track.nalUnitLengthFieldLength != 0) { // Zero the top three bytes of the array that we'll use to decode nal unit lengths, in case // they're only 1 or 2 bytes long. - byte[] nalPrefixData = nalPrefix.data; + byte[] nalPrefixData = nalPrefix.getData(); nalPrefixData[0] = 0; nalPrefixData[1] = 0; nalPrefixData[2] = 0; @@ -1364,11 +1364,12 @@ private boolean readSample(ExtractorInput input) throws IOException { if (processSeiNalUnitPayload) { // Read and write the payload of the SEI NAL unit. nalBuffer.reset(sampleCurrentNalBytesRemaining); - input.readFully(nalBuffer.data, 0, sampleCurrentNalBytesRemaining); + input.readFully(nalBuffer.getData(), 0, sampleCurrentNalBytesRemaining); output.sampleData(nalBuffer, sampleCurrentNalBytesRemaining); writtenBytes = sampleCurrentNalBytesRemaining; // Unescape and process the SEI NAL unit. - int unescapedLength = NalUnitUtil.unescapeStream(nalBuffer.data, nalBuffer.limit()); + int unescapedLength = + NalUnitUtil.unescapeStream(nalBuffer.getData(), nalBuffer.limit()); // If the format is H.265/HEVC the NAL unit header has two bytes so skip one more byte. nalBuffer.setPosition(MimeTypes.VIDEO_H265.equals(track.format.sampleMimeType) ? 1 : 0); nalBuffer.setLimit(unescapedLength); @@ -1466,7 +1467,7 @@ private static DrmInitData getDrmInitDataFromAtoms(List leafChild if (schemeDatas == null) { schemeDatas = new ArrayList<>(); } - byte[] psshData = child.data.data; + byte[] psshData = child.data.getData(); @Nullable UUID uuid = PsshAtomUtil.parseUuid(psshData); if (uuid == null) { Log.w(TAG, "Skipped pssh atom (failed to extract uuid)"); @@ -1706,7 +1707,7 @@ public int outputSampleEncryptionData(int sampleSize, int clearHeaderSize) { boolean writeSubsampleEncryptionData = haveSubsampleEncryptionTable || clearHeaderSize != 0; // Write the signal byte, containing the vector size and the subsample encryption flag. - encryptionSignalByte.data[0] = + encryptionSignalByte.getData()[0] = (byte) (vectorSize | (writeSubsampleEncryptionData ? 0x80 : 0)); encryptionSignalByte.setPosition(0); output.sampleData(encryptionSignalByte, 1, TrackOutput.SAMPLE_DATA_PART_ENCRYPTION); @@ -1724,16 +1725,17 @@ public int outputSampleEncryptionData(int sampleSize, int clearHeaderSize) { // into account. scratch.reset(SINGLE_SUBSAMPLE_ENCRYPTION_DATA_LENGTH); // subsampleCount = 1 (unsigned short) - scratch.data[0] = (byte) 0; - scratch.data[1] = (byte) 1; + byte[] data = scratch.getData(); + data[0] = (byte) 0; + data[1] = (byte) 1; // clearDataSize = clearHeaderSize (unsigned short) - scratch.data[2] = (byte) ((clearHeaderSize >> 8) & 0xFF); - scratch.data[3] = (byte) (clearHeaderSize & 0xFF); + data[2] = (byte) ((clearHeaderSize >> 8) & 0xFF); + data[3] = (byte) (clearHeaderSize & 0xFF); // encryptedDataSize = sampleSize (unsigned int) - scratch.data[4] = (byte) ((sampleSize >> 24) & 0xFF); - scratch.data[5] = (byte) ((sampleSize >> 16) & 0xFF); - scratch.data[6] = (byte) ((sampleSize >> 8) & 0xFF); - scratch.data[7] = (byte) (sampleSize & 0xFF); + data[4] = (byte) ((sampleSize >> 24) & 0xFF); + data[5] = (byte) ((sampleSize >> 16) & 0xFF); + data[6] = (byte) ((sampleSize >> 8) & 0xFF); + data[7] = (byte) (sampleSize & 0xFF); output.sampleData( scratch, SINGLE_SUBSAMPLE_ENCRYPTION_DATA_LENGTH, @@ -1750,13 +1752,14 @@ public int outputSampleEncryptionData(int sampleSize, int clearHeaderSize) { // We need to account for the additional clear header by adding clearHeaderSize to // clearDataSize for the first subsample specified in the subsample encryption data. scratch.reset(subsampleDataLength); - scratch.readBytes(subsampleEncryptionData.data, /* offset= */ 0, subsampleDataLength); + scratch.readBytes(subsampleEncryptionData.getData(), /* offset= */ 0, subsampleDataLength); subsampleEncryptionData.skipBytes(subsampleDataLength); - int clearDataSize = (scratch.data[2] & 0xFF) << 8 | (scratch.data[3] & 0xFF); + byte[] data = scratch.getData(); + int clearDataSize = (data[2] & 0xFF) << 8 | (data[3] & 0xFF); int adjustedClearDataSize = clearDataSize + clearHeaderSize; - scratch.data[2] = (byte) ((adjustedClearDataSize >> 8) & 0xFF); - scratch.data[3] = (byte) (adjustedClearDataSize & 0xFF); + data[2] = (byte) ((adjustedClearDataSize >> 8) & 0xFF); + data[3] = (byte) (adjustedClearDataSize & 0xFF); subsampleEncryptionData = scratch; } diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Mp4Extractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Mp4Extractor.java index 1e0fc95ea3f..0f0851d7ae5 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Mp4Extractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Mp4Extractor.java @@ -277,7 +277,7 @@ private void enterReadingAtomHeaderState() { private boolean readAtomHeader(ExtractorInput input) throws IOException { if (atomHeaderBytesRead == 0) { // Read the standard length atom header. - if (!input.readFully(atomHeader.data, 0, Atom.HEADER_SIZE, true)) { + if (!input.readFully(atomHeader.getData(), 0, Atom.HEADER_SIZE, true)) { return false; } atomHeaderBytesRead = Atom.HEADER_SIZE; @@ -289,7 +289,7 @@ private boolean readAtomHeader(ExtractorInput input) throws IOException { if (atomSize == Atom.DEFINES_LARGE_SIZE) { // Read the large size. int headerBytesRemaining = Atom.LONG_HEADER_SIZE - Atom.HEADER_SIZE; - input.readFully(atomHeader.data, Atom.HEADER_SIZE, headerBytesRemaining); + input.readFully(atomHeader.getData(), Atom.HEADER_SIZE, headerBytesRemaining); atomHeaderBytesRead += headerBytesRemaining; atomSize = atomHeader.readUnsignedLongToLong(); } else if (atomSize == Atom.EXTENDS_TO_END_SIZE) { @@ -329,7 +329,7 @@ private boolean readAtomHeader(ExtractorInput input) throws IOException { Assertions.checkState(atomHeaderBytesRead == Atom.HEADER_SIZE); Assertions.checkState(atomSize <= Integer.MAX_VALUE); ParsableByteArray atomData = new ParsableByteArray((int) atomSize); - System.arraycopy(atomHeader.data, 0, atomData.data, 0, Atom.HEADER_SIZE); + System.arraycopy(atomHeader.getData(), 0, atomData.getData(), 0, Atom.HEADER_SIZE); this.atomData = atomData; parserState = STATE_READING_ATOM_PAYLOAD; } else { @@ -352,7 +352,7 @@ private boolean readAtomPayload(ExtractorInput input, PositionHolder positionHol boolean seekRequired = false; @Nullable ParsableByteArray atomData = this.atomData; if (atomData != null) { - input.readFully(atomData.data, atomHeaderBytesRead, (int) atomPayloadSize); + input.readFully(atomData.getData(), atomHeaderBytesRead, (int) atomPayloadSize); if (atomType == Atom.TYPE_ftyp) { isQuickTime = processFtypAtom(atomData); } else if (!containerAtoms.isEmpty()) { @@ -509,7 +509,7 @@ private int readSample(ExtractorInput input, PositionHolder positionHolder) thro if (track.track.nalUnitLengthFieldLength != 0) { // Zero the top three bytes of the array that we'll use to decode nal unit lengths, in case // they're only 1 or 2 bytes long. - byte[] nalLengthData = nalLength.data; + byte[] nalLengthData = nalLength.getData(); nalLengthData[0] = 0; nalLengthData[1] = 0; nalLengthData[2] = 0; @@ -651,7 +651,7 @@ private void maybeSkipRemainingMetaAtomHeaderBytes(ExtractorInput input) throws // (iso) [1 byte version + 3 bytes flags][4 byte size of next atom] // (qt) [4 byte size of next atom ][4 byte hdlr atom type ] // In case of (iso) we need to skip the next 4 bytes. - input.peekFully(scratch.data, 0, 8); + input.peekFully(scratch.getData(), 0, 8); scratch.skipBytes(4); if (scratch.readInt() == Atom.TYPE_hdlr) { input.resetPeekPosition(); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Sniffer.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Sniffer.java index f8078353d2f..3d95390b914 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Sniffer.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/Sniffer.java @@ -99,13 +99,14 @@ private static boolean sniffInternal(ExtractorInput input, boolean fragmented) // Read an atom header. int headerSize = Atom.HEADER_SIZE; buffer.reset(headerSize); - input.peekFully(buffer.data, 0, headerSize); + input.peekFully(buffer.getData(), 0, headerSize); long atomSize = buffer.readUnsignedInt(); int atomType = buffer.readInt(); if (atomSize == Atom.DEFINES_LARGE_SIZE) { // Read the large atom size. headerSize = Atom.LONG_HEADER_SIZE; - input.peekFully(buffer.data, Atom.HEADER_SIZE, Atom.LONG_HEADER_SIZE - Atom.HEADER_SIZE); + input.peekFully( + buffer.getData(), Atom.HEADER_SIZE, Atom.LONG_HEADER_SIZE - Atom.HEADER_SIZE); buffer.setLimit(Atom.LONG_HEADER_SIZE); atomSize = buffer.readLong(); } else if (atomSize == Atom.EXTENDS_TO_END_SIZE) { @@ -153,7 +154,7 @@ private static boolean sniffInternal(ExtractorInput input, boolean fragmented) return false; } buffer.reset(atomDataSize); - input.peekFully(buffer.data, 0, atomDataSize); + input.peekFully(buffer.getData(), 0, atomDataSize); int brandsCount = atomDataSize / 4; for (int i = 0; i < brandsCount; i++) { if (i == 1) { diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/TrackFragment.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/TrackFragment.java index 74f46d1837a..92ce551f488 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/TrackFragment.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/TrackFragment.java @@ -174,7 +174,7 @@ public void initEncryptionData(int length) { * @param input An {@link ExtractorInput} from which to read the encryption data. */ public void fillEncryptionData(ExtractorInput input) throws IOException { - input.readFully(sampleEncryptionData.data, 0, sampleEncryptionData.limit()); + input.readFully(sampleEncryptionData.getData(), 0, sampleEncryptionData.limit()); sampleEncryptionData.setPosition(0); sampleEncryptionDataNeedsFill = false; } @@ -185,7 +185,7 @@ public void fillEncryptionData(ExtractorInput input) throws IOException { * @param source A source from which to read the encryption data. */ public void fillEncryptionData(ParsableByteArray source) { - source.readBytes(sampleEncryptionData.data, 0, sampleEncryptionData.limit()); + source.readBytes(sampleEncryptionData.getData(), 0, sampleEncryptionData.limit()); sampleEncryptionData.setPosition(0); sampleEncryptionDataNeedsFill = false; } diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/FlacReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/FlacReader.java index 1d6f0da9a1b..e64e6b1dc20 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/FlacReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/FlacReader.java @@ -61,7 +61,7 @@ private static boolean isAudioPacket(byte[] data) { @Override protected long preparePayload(ParsableByteArray packet) { - if (!isAudioPacket(packet.data)) { + if (!isAudioPacket(packet.getData())) { return -1; } return getFlacFrameBlockSize(packet); @@ -69,7 +69,7 @@ protected long preparePayload(ParsableByteArray packet) { @Override protected boolean readHeaders(ParsableByteArray packet, long position, SetupData setupData) { - byte[] data = packet.data; + byte[] data = packet.getData(); @Nullable FlacStreamMetadata streamMetadata = this.streamMetadata; if (streamMetadata == null) { streamMetadata = new FlacStreamMetadata(data, 17); @@ -92,7 +92,7 @@ protected boolean readHeaders(ParsableByteArray packet, long position, SetupData } private int getFlacFrameBlockSize(ParsableByteArray packet) { - int blockSizeKey = (packet.data[2] & 0xFF) >> 4; + int blockSizeKey = (packet.getData()[2] & 0xFF) >> 4; if (blockSizeKey == 6 || blockSizeKey == 7) { // Skip the sample number. packet.skipBytes(FRAME_HEADER_SAMPLE_NUMBER_OFFSET); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OggExtractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OggExtractor.java index 9aaa3332cea..94f2d36f49b 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OggExtractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OggExtractor.java @@ -96,7 +96,7 @@ private boolean sniffInternal(ExtractorInput input) throws IOException { int length = Math.min(header.bodySize, MAX_VERIFICATION_BYTES); ParsableByteArray scratch = new ParsableByteArray(length); - input.peekFully(scratch.data, 0, length); + input.peekFully(scratch.getData(), 0, length); if (FlacReader.verifyBitstreamType(resetPosition(scratch))) { streamReader = new FlacReader(); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OggPacket.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OggPacket.java index 07724cc33c0..8b54b999147 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OggPacket.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OggPacket.java @@ -86,9 +86,9 @@ public boolean populate(ExtractorInput input) throws IOException { int segmentIndex = currentSegmentIndex + segmentCount; if (size > 0) { if (packetArray.capacity() < packetArray.limit() + size) { - packetArray.data = Arrays.copyOf(packetArray.data, packetArray.limit() + size); + packetArray.reset(Arrays.copyOf(packetArray.getData(), packetArray.limit() + size)); } - input.readFully(packetArray.data, packetArray.limit(), size); + input.readFully(packetArray.getData(), packetArray.limit(), size); packetArray.setLimit(packetArray.limit() + size); populated = pageHeader.laces[segmentIndex - 1] != 255; } @@ -124,11 +124,12 @@ public ParsableByteArray getPayload() { * Trims the packet data array. */ public void trimPayload() { - if (packetArray.data.length == OggPageHeader.MAX_PAGE_PAYLOAD) { + if (packetArray.getData().length == OggPageHeader.MAX_PAGE_PAYLOAD) { return; } - packetArray.data = Arrays.copyOf(packetArray.data, Math.max(OggPageHeader.MAX_PAGE_PAYLOAD, - packetArray.limit())); + packetArray.reset( + Arrays.copyOf( + packetArray.getData(), Math.max(OggPageHeader.MAX_PAGE_PAYLOAD, packetArray.limit()))); } /** diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OggPageHeader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OggPageHeader.java index 853347ee181..4330013ad0e 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OggPageHeader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OggPageHeader.java @@ -105,7 +105,7 @@ public boolean skipToNextPage(ExtractorInput input) throws IOException { public boolean skipToNextPage(ExtractorInput input, long limit) throws IOException { Assertions.checkArgument(input.getPosition() == input.getPeekPosition()); while ((limit == C.POSITION_UNSET || input.getPosition() + CAPTURE_PATTERN_SIZE < limit) - && peekSafely(input, scratch.data, 0, CAPTURE_PATTERN_SIZE, /* quiet= */ true)) { + && peekSafely(input, scratch.getData(), 0, CAPTURE_PATTERN_SIZE, /* quiet= */ true)) { scratch.reset(); if (scratch.readUnsignedInt() == CAPTURE_PATTERN) { input.resetPeekPosition(); @@ -133,7 +133,7 @@ && peekSafely(input, scratch.data, 0, CAPTURE_PATTERN_SIZE, /* quiet= */ true)) public boolean populate(ExtractorInput input, boolean quiet) throws IOException { reset(); scratch.reset(); - if (!peekSafely(input, scratch.data, 0, EMPTY_PAGE_HEADER_SIZE, quiet) + if (!peekSafely(input, scratch.getData(), 0, EMPTY_PAGE_HEADER_SIZE, quiet) || scratch.readUnsignedInt() != CAPTURE_PATTERN) { return false; } @@ -157,7 +157,7 @@ public boolean populate(ExtractorInput input, boolean quiet) throws IOException // calculate total size of header including laces scratch.reset(); - input.peekFully(scratch.data, 0, pageSegmentCount); + input.peekFully(scratch.getData(), 0, pageSegmentCount); for (int i = 0; i < pageSegmentCount; i++) { laces[i] = scratch.readUnsignedByte(); bodySize += laces[i]; diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OpusReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OpusReader.java index 9fe9ca36e66..de03843b307 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OpusReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/OpusReader.java @@ -59,13 +59,13 @@ protected void reset(boolean headerData) { @Override protected long preparePayload(ParsableByteArray packet) { - return convertTimeToGranule(getPacketDurationUs(packet.data)); + return convertTimeToGranule(getPacketDurationUs(packet.getData())); } @Override protected boolean readHeaders(ParsableByteArray packet, long position, SetupData setupData) { if (!headerRead) { - byte[] metadata = Arrays.copyOf(packet.data, packet.limit()); + byte[] metadata = Arrays.copyOf(packet.getData(), packet.limit()); int channelCount = metadata[9] & 0xFF; int preskip = ((metadata[11] & 0xFF) << 8) | (metadata[10] & 0xFF); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/VorbisReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/VorbisReader.java index d6faa909279..7cc193e698b 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/VorbisReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ogg/VorbisReader.java @@ -68,12 +68,12 @@ protected void onSeekEnd(long currentGranule) { @Override protected long preparePayload(ParsableByteArray packet) { // if this is not an audio packet... - if ((packet.data[0] & 0x01) == 1) { + if ((packet.getData()[0] & 0x01) == 1) { return -1; } // ... we need to decode the block size - int packetBlockSize = decodeBlockSize(packet.data[0], vorbisSetup); + int packetBlockSize = decodeBlockSize(packet.getData()[0], vorbisSetup); // a packet contains samples produced from overlapping the previous and current frame data // (https://www.xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-350001.3.2) int samplesInPacket = seenFirstAudioPacket ? (packetBlockSize + previousPacketBlockSize) / 4 @@ -134,7 +134,7 @@ protected boolean readHeaders(ParsableByteArray packet, long position, SetupData // the third packet contains the setup header byte[] setupHeaderData = new byte[scratch.limit()]; // raw data of vorbis setup header has to be passed to decoder as CSD buffer #2 - System.arraycopy(scratch.data, 0, setupHeaderData, 0, scratch.limit()); + System.arraycopy(scratch.getData(), 0, setupHeaderData, 0, scratch.limit()); // partially decode setup header to get the modes Mode[] modes = VorbisUtil.readVorbisModes(scratch, vorbisIdHeader.channels); // we need the ilog of modes all the time when extracting, so we compute it once @@ -164,10 +164,11 @@ protected boolean readHeaders(ParsableByteArray packet, long position, SetupData buffer.setLimit(buffer.limit() + 4); // The vorbis decoder expects the number of samples in the packet // to be appended to the audio data as an int32 - buffer.data[buffer.limit() - 4] = (byte) (packetSampleCount & 0xFF); - buffer.data[buffer.limit() - 3] = (byte) ((packetSampleCount >>> 8) & 0xFF); - buffer.data[buffer.limit() - 2] = (byte) ((packetSampleCount >>> 16) & 0xFF); - buffer.data[buffer.limit() - 1] = (byte) ((packetSampleCount >>> 24) & 0xFF); + byte[] data = buffer.getData(); + data[buffer.limit() - 4] = (byte) (packetSampleCount & 0xFF); + data[buffer.limit() - 3] = (byte) ((packetSampleCount >>> 8) & 0xFF); + data[buffer.limit() - 2] = (byte) ((packetSampleCount >>> 16) & 0xFF); + data[buffer.limit() - 1] = (byte) ((packetSampleCount >>> 24) & 0xFF); } private static int decodeBlockSize(byte firstByteOfAudioPacket, VorbisSetup vorbisSetup) { diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/rawcc/RawCcExtractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/rawcc/RawCcExtractor.java index 4e0cefcb546..1b4d543e3fe 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/rawcc/RawCcExtractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/rawcc/RawCcExtractor.java @@ -73,7 +73,7 @@ public void init(ExtractorOutput output) { @Override public boolean sniff(ExtractorInput input) throws IOException { dataScratch.reset(); - input.peekFully(dataScratch.data, 0, HEADER_SIZE); + input.peekFully(dataScratch.getData(), 0, HEADER_SIZE); return dataScratch.readInt() == HEADER_ID; } @@ -119,7 +119,7 @@ public void release() { private boolean parseHeader(ExtractorInput input) throws IOException { dataScratch.reset(); - if (input.readFully(dataScratch.data, 0, HEADER_SIZE, true)) { + if (input.readFully(dataScratch.getData(), 0, HEADER_SIZE, true)) { if (dataScratch.readInt() != HEADER_ID) { throw new IOException("Input not RawCC"); } @@ -134,13 +134,13 @@ private boolean parseHeader(ExtractorInput input) throws IOException { private boolean parseTimestampAndSampleCount(ExtractorInput input) throws IOException { dataScratch.reset(); if (version == 0) { - if (!input.readFully(dataScratch.data, 0, TIMESTAMP_SIZE_V0 + 1, true)) { + if (!input.readFully(dataScratch.getData(), 0, TIMESTAMP_SIZE_V0 + 1, true)) { return false; } // version 0 timestamps are 45kHz, so we need to convert them into us timestampUs = dataScratch.readUnsignedInt() * 1000 / 45; } else if (version == 1) { - if (!input.readFully(dataScratch.data, 0, TIMESTAMP_SIZE_V1 + 1, true)) { + if (!input.readFully(dataScratch.getData(), 0, TIMESTAMP_SIZE_V1 + 1, true)) { return false; } timestampUs = dataScratch.readLong(); @@ -157,7 +157,7 @@ private boolean parseTimestampAndSampleCount(ExtractorInput input) throws IOExce private void parseSamples(ExtractorInput input) throws IOException { for (; remainingSampleCount > 0; remainingSampleCount--) { dataScratch.reset(); - input.readFully(dataScratch.data, 0, 3); + input.readFully(dataScratch.getData(), 0, 3); trackOutput.sampleData(dataScratch, 3); sampleBytesWritten += 3; diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Ac3Extractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Ac3Extractor.java index f0cb8ca1f72..75839e09177 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Ac3Extractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Ac3Extractor.java @@ -66,7 +66,7 @@ public boolean sniff(ExtractorInput input) throws IOException { ParsableByteArray scratch = new ParsableByteArray(ID3_HEADER_LENGTH); int startPosition = 0; while (true) { - input.peekFully(scratch.data, /* offset= */ 0, ID3_HEADER_LENGTH); + input.peekFully(scratch.getData(), /* offset= */ 0, ID3_HEADER_LENGTH); scratch.setPosition(0); if (scratch.readUnsignedInt24() != ID3_TAG) { break; @@ -82,7 +82,7 @@ public boolean sniff(ExtractorInput input) throws IOException { int headerPosition = startPosition; int validFramesCount = 0; while (true) { - input.peekFully(scratch.data, 0, 6); + input.peekFully(scratch.getData(), 0, 6); scratch.setPosition(0); int syncBytes = scratch.readUnsignedShort(); if (syncBytes != AC3_SYNC_WORD) { @@ -96,7 +96,7 @@ public boolean sniff(ExtractorInput input) throws IOException { if (++validFramesCount >= 4) { return true; } - int frameSize = Ac3Util.parseAc3SyncframeSize(scratch.data); + int frameSize = Ac3Util.parseAc3SyncframeSize(scratch.getData()); if (frameSize == C.LENGTH_UNSET) { return false; } @@ -125,7 +125,7 @@ public void release() { @Override public int read(ExtractorInput input, PositionHolder seekPosition) throws IOException { - int bytesRead = input.read(sampleData.data, 0, MAX_SYNC_FRAME_SIZE); + int bytesRead = input.read(sampleData.getData(), 0, MAX_SYNC_FRAME_SIZE); if (bytesRead == C.RESULT_END_OF_INPUT) { return RESULT_END_OF_INPUT; } diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Ac3Reader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Ac3Reader.java index b025be95e32..33c7d3ade9b 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Ac3Reader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Ac3Reader.java @@ -117,13 +117,13 @@ public void consume(ParsableByteArray data) { case STATE_FINDING_SYNC: if (skipToNextSync(data)) { state = STATE_READING_HEADER; - headerScratchBytes.data[0] = 0x0B; - headerScratchBytes.data[1] = 0x77; + headerScratchBytes.getData()[0] = 0x0B; + headerScratchBytes.getData()[1] = 0x77; bytesRead = 2; } break; case STATE_READING_HEADER: - if (continueRead(data, headerScratchBytes.data, HEADER_SIZE)) { + if (continueRead(data, headerScratchBytes.getData(), HEADER_SIZE)) { parseHeader(); headerScratchBytes.setPosition(0); output.sampleData(headerScratchBytes, HEADER_SIZE); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Ac4Extractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Ac4Extractor.java index c493d1d0bdf..996ae2f69b4 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Ac4Extractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Ac4Extractor.java @@ -73,7 +73,7 @@ public boolean sniff(ExtractorInput input) throws IOException { ParsableByteArray scratch = new ParsableByteArray(ID3_HEADER_LENGTH); int startPosition = 0; while (true) { - input.peekFully(scratch.data, /* offset= */ 0, ID3_HEADER_LENGTH); + input.peekFully(scratch.getData(), /* offset= */ 0, ID3_HEADER_LENGTH); scratch.setPosition(0); if (scratch.readUnsignedInt24() != ID3_TAG) { break; @@ -89,7 +89,7 @@ public boolean sniff(ExtractorInput input) throws IOException { int headerPosition = startPosition; int validFramesCount = 0; while (true) { - input.peekFully(scratch.data, /* offset= */ 0, /* length= */ FRAME_HEADER_SIZE); + input.peekFully(scratch.getData(), /* offset= */ 0, /* length= */ FRAME_HEADER_SIZE); scratch.setPosition(0); int syncBytes = scratch.readUnsignedShort(); if (syncBytes != AC40_SYNCWORD && syncBytes != AC41_SYNCWORD) { @@ -103,7 +103,7 @@ public boolean sniff(ExtractorInput input) throws IOException { if (++validFramesCount >= 4) { return true; } - int frameSize = Ac4Util.parseAc4SyncframeSize(scratch.data, syncBytes); + int frameSize = Ac4Util.parseAc4SyncframeSize(scratch.getData(), syncBytes); if (frameSize == C.LENGTH_UNSET) { return false; } @@ -133,7 +133,8 @@ public void release() { @Override public int read(ExtractorInput input, PositionHolder seekPosition) throws IOException { - int bytesRead = input.read(sampleData.data, /* offset= */ 0, /* length= */ READ_BUFFER_SIZE); + int bytesRead = + input.read(sampleData.getData(), /* offset= */ 0, /* length= */ READ_BUFFER_SIZE); if (bytesRead == C.RESULT_END_OF_INPUT) { return RESULT_END_OF_INPUT; } diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Ac4Reader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Ac4Reader.java index 517a233530b..ea1b892e96f 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Ac4Reader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Ac4Reader.java @@ -116,13 +116,13 @@ public void consume(ParsableByteArray data) { case STATE_FINDING_SYNC: if (skipToNextSync(data)) { state = STATE_READING_HEADER; - headerScratchBytes.data[0] = (byte) 0xAC; - headerScratchBytes.data[1] = (byte) (hasCRC ? 0x41 : 0x40); + headerScratchBytes.getData()[0] = (byte) 0xAC; + headerScratchBytes.getData()[1] = (byte) (hasCRC ? 0x41 : 0x40); bytesRead = 2; } break; case STATE_READING_HEADER: - if (continueRead(data, headerScratchBytes.data, Ac4Util.HEADER_SIZE_FOR_PARSER)) { + if (continueRead(data, headerScratchBytes.getData(), Ac4Util.HEADER_SIZE_FOR_PARSER)) { parseHeader(); headerScratchBytes.setPosition(0); output.sampleData(headerScratchBytes, Ac4Util.HEADER_SIZE_FOR_PARSER); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/AdtsExtractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/AdtsExtractor.java index f870527284d..54a6a20b361 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/AdtsExtractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/AdtsExtractor.java @@ -114,7 +114,7 @@ public AdtsExtractor(@Flags int flags) { firstFramePosition = C.POSITION_UNSET; // Allocate scratch space for an ID3 header. The same buffer is also used to read 4 byte values. scratch = new ParsableByteArray(ID3_HEADER_LENGTH); - scratchBits = new ParsableBitArray(scratch.data); + scratchBits = new ParsableBitArray(scratch.getData()); } // Extractor implementation. @@ -129,7 +129,7 @@ public boolean sniff(ExtractorInput input) throws IOException { int totalValidFramesSize = 0; int validFramesCount = 0; while (true) { - input.peekFully(scratch.data, 0, 2); + input.peekFully(scratch.getData(), 0, 2); scratch.setPosition(0); int syncBytes = scratch.readUnsignedShort(); if (!AdtsReader.isAdtsSyncWord(syncBytes)) { @@ -146,7 +146,7 @@ public boolean sniff(ExtractorInput input) throws IOException { } // Skip the frame. - input.peekFully(scratch.data, 0, 4); + input.peekFully(scratch.getData(), 0, 4); scratchBits.setPosition(14); int frameSize = scratchBits.readBits(13); // Either the stream is malformed OR we're not parsing an ADTS stream. @@ -189,7 +189,7 @@ public int read(ExtractorInput input, PositionHolder seekPosition) throws IOExce calculateAverageFrameSize(input); } - int bytesRead = input.read(packetBuffer.data, 0, MAX_PACKET_SIZE); + int bytesRead = input.read(packetBuffer.getData(), 0, MAX_PACKET_SIZE); boolean readEndOfStream = bytesRead == RESULT_END_OF_INPUT; maybeOutputSeekMap(inputLength, canUseConstantBitrateSeeking, readEndOfStream); if (readEndOfStream) { @@ -214,7 +214,7 @@ public int read(ExtractorInput input, PositionHolder seekPosition) throws IOExce private int peekId3Header(ExtractorInput input) throws IOException { int firstFramePosition = 0; while (true) { - input.peekFully(scratch.data, /* offset= */ 0, ID3_HEADER_LENGTH); + input.peekFully(scratch.getData(), /* offset= */ 0, ID3_HEADER_LENGTH); scratch.setPosition(0); if (scratch.readUnsignedInt24() != ID3_TAG) { break; @@ -270,7 +270,7 @@ private void calculateAverageFrameSize(ExtractorInput input) throws IOException long totalValidFramesSize = 0; try { while (input.peekFully( - scratch.data, /* offset= */ 0, /* length= */ 2, /* allowEndOfInput= */ true)) { + scratch.getData(), /* offset= */ 0, /* length= */ 2, /* allowEndOfInput= */ true)) { scratch.setPosition(0); int syncBytes = scratch.readUnsignedShort(); if (!AdtsReader.isAdtsSyncWord(syncBytes)) { @@ -281,7 +281,7 @@ private void calculateAverageFrameSize(ExtractorInput input) throws IOException } else { // Read the frame size. if (!input.peekFully( - scratch.data, /* offset= */ 0, /* length= */ 4, /* allowEndOfInput= */ true)) { + scratch.getData(), /* offset= */ 0, /* length= */ 4, /* allowEndOfInput= */ true)) { break; } scratchBits.setPosition(14); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/AdtsReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/AdtsReader.java index 59ab6599b08..3a7f4313406 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/AdtsReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/AdtsReader.java @@ -163,7 +163,7 @@ public void consume(ParsableByteArray data) throws ParserException { findNextSample(data); break; case STATE_READING_ID3_HEADER: - if (continueRead(data, id3HeaderBuffer.data, ID3_HEADER_SIZE)) { + if (continueRead(data, id3HeaderBuffer.getData(), ID3_HEADER_SIZE)) { parseId3Header(); } break; @@ -277,7 +277,7 @@ private void setCheckingAdtsHeaderState() { * @param pesBuffer The buffer whose position should be advanced. */ private void findNextSample(ParsableByteArray pesBuffer) { - byte[] adtsData = pesBuffer.data; + byte[] adtsData = pesBuffer.getData(); int position = pesBuffer.getPosition(); int endOffset = pesBuffer.limit(); while (position < endOffset) { @@ -335,7 +335,7 @@ private void checkAdtsHeader(ParsableByteArray buffer) { return; } // Peek the next byte of buffer into scratch array. - adtsScratch.data[0] = buffer.data[buffer.getPosition()]; + adtsScratch.data[0] = buffer.getData()[buffer.getPosition()]; adtsScratch.setPosition(2); int currentFrameSampleRateIndex = adtsScratch.readBits(4); @@ -416,7 +416,7 @@ private boolean checkSyncPositionValid(ParsableByteArray pesBuffer, int syncPosi // The bytes following the frame must be either another SYNC word with the same MPEG version, or // the start of an ID3 header. - byte[] data = pesBuffer.data; + byte[] data = pesBuffer.getData(); int dataLimit = pesBuffer.limit(); int nextSyncPosition = syncPositionCandidate + frameSize; if (nextSyncPosition >= dataLimit) { diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/DtsReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/DtsReader.java index a201fb72d7c..034f08618dd 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/DtsReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/DtsReader.java @@ -99,7 +99,7 @@ public void consume(ParsableByteArray data) { } break; case STATE_READING_HEADER: - if (continueRead(data, headerScratchBytes.data, HEADER_SIZE)) { + if (continueRead(data, headerScratchBytes.getData(), HEADER_SIZE)) { parseHeader(); headerScratchBytes.setPosition(0); output.sampleData(headerScratchBytes, HEADER_SIZE); @@ -155,10 +155,11 @@ private boolean skipToNextSync(ParsableByteArray pesBuffer) { syncBytes <<= 8; syncBytes |= pesBuffer.readUnsignedByte(); if (DtsUtil.isSyncWord(syncBytes)) { - headerScratchBytes.data[0] = (byte) ((syncBytes >> 24) & 0xFF); - headerScratchBytes.data[1] = (byte) ((syncBytes >> 16) & 0xFF); - headerScratchBytes.data[2] = (byte) ((syncBytes >> 8) & 0xFF); - headerScratchBytes.data[3] = (byte) (syncBytes & 0xFF); + byte[] headerData = headerScratchBytes.getData(); + headerData[0] = (byte) ((syncBytes >> 24) & 0xFF); + headerData[1] = (byte) ((syncBytes >> 16) & 0xFF); + headerData[2] = (byte) ((syncBytes >> 8) & 0xFF); + headerData[3] = (byte) (syncBytes & 0xFF); bytesRead = 4; syncBytes = 0; return true; @@ -170,7 +171,7 @@ private boolean skipToNextSync(ParsableByteArray pesBuffer) { /** Parses the sample header. */ @RequiresNonNull("output") private void parseHeader() { - byte[] frameData = headerScratchBytes.data; + byte[] frameData = headerScratchBytes.getData(); if (format == null) { format = DtsUtil.parseDtsFormat(frameData, formatId, language, null); output.format(format); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/H262Reader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/H262Reader.java index a7cbd9c5d6b..898084013fd 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/H262Reader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/H262Reader.java @@ -123,7 +123,7 @@ public void consume(ParsableByteArray data) { checkStateNotNull(output); // Asserts that createTracks has been called. int offset = data.getPosition(); int limit = data.limit(); - byte[] dataArray = data.data; + byte[] dataArray = data.getData(); // Append the data to the buffer. totalBytesWritten += data.bytesLeft(); @@ -144,7 +144,7 @@ public void consume(ParsableByteArray data) { } // We've found a start code with the following value. - int startCodeValue = data.data[startCodeOffset + 3] & 0xFF; + int startCodeValue = data.getData()[startCodeOffset + 3] & 0xFF; // This is the number of bytes from the current offset to the start of the next start // code. It may be negative if the start code started in the previously consumed data. int lengthToStartCode = startCodeOffset - offset; @@ -178,7 +178,7 @@ public void consume(ParsableByteArray data) { Util.castNonNull(userDataReader).consume(sampleTimeUs, userDataParsable); } - if (startCodeValue == START_USER_DATA && data.data[startCodeOffset + 2] == 0x1) { + if (startCodeValue == START_USER_DATA && data.getData()[startCodeOffset + 2] == 0x1) { userData.startNalUnit(startCodeValue); } } diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/H263Reader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/H263Reader.java index bbe2f91d6fd..4db898553cc 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/H263Reader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/H263Reader.java @@ -133,7 +133,7 @@ public void consume(ParsableByteArray data) { checkStateNotNull(output); int offset = data.getPosition(); int limit = data.limit(); - byte[] dataArray = data.data; + byte[] dataArray = data.getData(); // Append the data to the buffer. totalBytesWritten += data.bytesLeft(); @@ -155,7 +155,7 @@ public void consume(ParsableByteArray data) { } // We've found a start code with the following value. - int startCodeValue = data.data[startCodeOffset + 3] & 0xFF; + int startCodeValue = data.getData()[startCodeOffset + 3] & 0xFF; // This is the number of bytes from the current offset to the start of the next start // code. It may be negative if the start code started in the previously consumed data. int lengthToStartCode = startCodeOffset - offset; @@ -191,7 +191,8 @@ public void consume(ParsableByteArray data) { castNonNull(userDataReader).consume(pesTimeUs, userDataParsable); } - if (startCodeValue == START_CODE_VALUE_USER_DATA && data.data[startCodeOffset + 2] == 0x1) { + if (startCodeValue == START_CODE_VALUE_USER_DATA + && data.getData()[startCodeOffset + 2] == 0x1) { userData.startNalUnit(startCodeValue); } } diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/H264Reader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/H264Reader.java index f212117252d..d0bf2067c92 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/H264Reader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/H264Reader.java @@ -125,7 +125,7 @@ public void consume(ParsableByteArray data) { int offset = data.getPosition(); int limit = data.limit(); - byte[] dataArray = data.data; + byte[] dataArray = data.getData(); // Append the data to the buffer. totalBytesWritten += data.bytesLeft(); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/H265Reader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/H265Reader.java index c310d8c31db..00bab07f8a1 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/H265Reader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/H265Reader.java @@ -125,7 +125,7 @@ public void consume(ParsableByteArray data) { while (data.bytesLeft() > 0) { int offset = data.getPosition(); int limit = data.limit(); - byte[] dataArray = data.data; + byte[] dataArray = data.getData(); // Append the data to the buffer. totalBytesWritten += data.bytesLeft(); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Id3Reader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Id3Reader.java index 28c54892c45..10df4e19376 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Id3Reader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/Id3Reader.java @@ -89,7 +89,11 @@ public void consume(ParsableByteArray data) { if (sampleBytesRead < ID3_HEADER_LENGTH) { // We're still reading the ID3 header. int headerBytesAvailable = Math.min(bytesAvailable, ID3_HEADER_LENGTH - sampleBytesRead); - System.arraycopy(data.data, data.getPosition(), id3Header.data, sampleBytesRead, + System.arraycopy( + data.getData(), + data.getPosition(), + id3Header.getData(), + sampleBytesRead, headerBytesAvailable); if (sampleBytesRead + headerBytesAvailable == ID3_HEADER_LENGTH) { // We've finished reading the ID3 header. Extract the sample size. diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/LatmReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/LatmReader.java index 3465d89318c..e2ae9204372 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/LatmReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/LatmReader.java @@ -79,7 +79,7 @@ public final class LatmReader implements ElementaryStreamReader { public LatmReader(@Nullable String language) { this.language = language; sampleDataBuffer = new ParsableByteArray(INITIAL_BUFFER_SIZE); - sampleBitArray = new ParsableBitArray(sampleDataBuffer.data); + sampleBitArray = new ParsableBitArray(sampleDataBuffer.getData()); } @Override @@ -122,7 +122,7 @@ public void consume(ParsableByteArray data) throws ParserException { break; case STATE_READING_HEADER: sampleSize = ((secondHeaderByte & ~SYNC_BYTE_SECOND) << 8) | data.readUnsignedByte(); - if (sampleSize > sampleDataBuffer.data.length) { + if (sampleSize > sampleDataBuffer.getData().length) { resetBufferForSize(sampleSize); } bytesRead = 0; @@ -302,7 +302,7 @@ private void parsePayloadMux(ParsableBitArray data, int muxLengthBytes) { } else { // Sample data is not byte-aligned and we need align it ourselves before outputting. // Byte alignment is needed because LATM framing is not supported by MediaCodec. - data.readBits(sampleDataBuffer.data, 0, muxLengthBytes * 8); + data.readBits(sampleDataBuffer.getData(), 0, muxLengthBytes * 8); sampleDataBuffer.setPosition(0); } output.sampleData(sampleDataBuffer, muxLengthBytes); @@ -312,7 +312,7 @@ private void parsePayloadMux(ParsableBitArray data, int muxLengthBytes) { private void resetBufferForSize(int newSize) { sampleDataBuffer.reset(newSize); - sampleBitArray.reset(sampleDataBuffer.data); + sampleBitArray.reset(sampleDataBuffer.getData()); } private static long latmGetValue(ParsableBitArray data) { diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/MpegAudioReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/MpegAudioReader.java index d143ecb3807..58339fdaece 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/MpegAudioReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/MpegAudioReader.java @@ -67,7 +67,7 @@ public MpegAudioReader(@Nullable String language) { state = STATE_FINDING_HEADER; // The first byte of an MPEG Audio frame header is always 0xFF. headerScratch = new ParsableByteArray(4); - headerScratch.data[0] = (byte) 0xFF; + headerScratch.getData()[0] = (byte) 0xFF; header = new MpegAudioUtil.Header(); this.language = language; } @@ -129,7 +129,7 @@ public void packetFinished() { * @param source The source from which to read. */ private void findHeader(ParsableByteArray source) { - byte[] data = source.data; + byte[] data = source.getData(); int startOffset = source.getPosition(); int endOffset = source.limit(); for (int i = startOffset; i < endOffset; i++) { @@ -140,7 +140,7 @@ private void findHeader(ParsableByteArray source) { source.setPosition(i + 1); // Reset lastByteWasFF for next time. lastByteWasFF = false; - headerScratch.data[1] = data[i]; + headerScratch.getData()[1] = data[i]; frameBytesRead = 2; state = STATE_READING_HEADER; return; @@ -168,7 +168,7 @@ private void findHeader(ParsableByteArray source) { @RequiresNonNull("output") private void readHeaderRemainder(ParsableByteArray source) { int bytesToRead = Math.min(source.bytesLeft(), HEADER_SIZE - frameBytesRead); - source.readBytes(headerScratch.data, frameBytesRead, bytesToRead); + source.readBytes(headerScratch.getData(), frameBytesRead, bytesToRead); frameBytesRead += bytesToRead; if (frameBytesRead < HEADER_SIZE) { // We haven't read the whole header yet. diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/PsBinarySearchSeeker.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/PsBinarySearchSeeker.java index 09732198047..52c00206cb0 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/PsBinarySearchSeeker.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/PsBinarySearchSeeker.java @@ -75,7 +75,7 @@ public TimestampSearchResult searchForTimestamp(ExtractorInput input, long targe int bytesToSearch = (int) Math.min(TIMESTAMP_SEARCH_BYTES, input.getLength() - inputPosition); packetBuffer.reset(bytesToSearch); - input.peekFully(packetBuffer.data, /* offset= */ 0, bytesToSearch); + input.peekFully(packetBuffer.getData(), /* offset= */ 0, bytesToSearch); return searchForScrValueInBuffer(packetBuffer, targetTimestamp, inputPosition); } @@ -92,7 +92,7 @@ private TimestampSearchResult searchForScrValueInBuffer( long lastScrTimeUsInRange = C.TIME_UNSET; while (packetBuffer.bytesLeft() >= 4) { - int nextStartCode = peekIntAtPosition(packetBuffer.data, packetBuffer.getPosition()); + int nextStartCode = peekIntAtPosition(packetBuffer.getData(), packetBuffer.getPosition()); if (nextStartCode != PsExtractor.PACK_START_CODE) { packetBuffer.skipBytes(1); continue; @@ -162,7 +162,7 @@ private static void skipToEndOfCurrentPack(ParsableByteArray packetBuffer) { return; } - int nextStartCode = peekIntAtPosition(packetBuffer.data, packetBuffer.getPosition()); + int nextStartCode = peekIntAtPosition(packetBuffer.getData(), packetBuffer.getPosition()); if (nextStartCode == PsExtractor.SYSTEM_HEADER_START_CODE) { packetBuffer.skipBytes(4); int systemHeaderLength = packetBuffer.readUnsignedShort(); @@ -178,7 +178,7 @@ private static void skipToEndOfCurrentPack(ParsableByteArray packetBuffer) { // If we couldn't find these codes within the buffer, return the buffer limit, or return // the first position which PES packets pattern does not match (some malformed packets). while (packetBuffer.bytesLeft() >= 4) { - nextStartCode = peekIntAtPosition(packetBuffer.data, packetBuffer.getPosition()); + nextStartCode = peekIntAtPosition(packetBuffer.getData(), packetBuffer.getPosition()); if (nextStartCode == PsExtractor.PACK_START_CODE || nextStartCode == PsExtractor.MPEG_PROGRAM_END_CODE) { break; diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/PsDurationReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/PsDurationReader.java index 0a74e92ce08..1721207d5c0 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/PsDurationReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/PsDurationReader.java @@ -145,7 +145,7 @@ private int readFirstScrValue(ExtractorInput input, PositionHolder seekPositionH packetBuffer.reset(bytesToSearch); input.resetPeekPosition(); - input.peekFully(packetBuffer.data, /* offset= */ 0, bytesToSearch); + input.peekFully(packetBuffer.getData(), /* offset= */ 0, bytesToSearch); firstScrValue = readFirstScrValueFromBuffer(packetBuffer); isFirstScrValueRead = true; @@ -158,7 +158,7 @@ private long readFirstScrValueFromBuffer(ParsableByteArray packetBuffer) { for (int searchPosition = searchStartPosition; searchPosition < searchEndPosition - 3; searchPosition++) { - int nextStartCode = peekIntAtPosition(packetBuffer.data, searchPosition); + int nextStartCode = peekIntAtPosition(packetBuffer.getData(), searchPosition); if (nextStartCode == PsExtractor.PACK_START_CODE) { packetBuffer.setPosition(searchPosition + 4); long scrValue = readScrValueFromPack(packetBuffer); @@ -182,7 +182,7 @@ private int readLastScrValue(ExtractorInput input, PositionHolder seekPositionHo packetBuffer.reset(bytesToSearch); input.resetPeekPosition(); - input.peekFully(packetBuffer.data, /* offset= */ 0, bytesToSearch); + input.peekFully(packetBuffer.getData(), /* offset= */ 0, bytesToSearch); lastScrValue = readLastScrValueFromBuffer(packetBuffer); isLastScrValueRead = true; @@ -195,7 +195,7 @@ private long readLastScrValueFromBuffer(ParsableByteArray packetBuffer) { for (int searchPosition = searchEndPosition - 4; searchPosition >= searchStartPosition; searchPosition--) { - int nextStartCode = peekIntAtPosition(packetBuffer.data, searchPosition); + int nextStartCode = peekIntAtPosition(packetBuffer.getData(), searchPosition); if (nextStartCode == PsExtractor.PACK_START_CODE) { packetBuffer.setPosition(searchPosition + 4); long scrValue = readScrValueFromPack(packetBuffer); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/PsExtractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/PsExtractor.java index 96bdc226315..4ead98febbf 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/PsExtractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/PsExtractor.java @@ -182,7 +182,7 @@ public int read(ExtractorInput input, PositionHolder seekPosition) throws IOExce return RESULT_END_OF_INPUT; } // First peek and check what type of start code is next. - if (!input.peekFully(psPacketBuffer.data, 0, 4, true)) { + if (!input.peekFully(psPacketBuffer.getData(), 0, 4, true)) { return RESULT_END_OF_INPUT; } @@ -192,7 +192,7 @@ public int read(ExtractorInput input, PositionHolder seekPosition) throws IOExce return RESULT_END_OF_INPUT; } else if (nextStartCode == PACK_START_CODE) { // Now peek the rest of the pack_header. - input.peekFully(psPacketBuffer.data, 0, 10); + input.peekFully(psPacketBuffer.getData(), 0, 10); // We only care about the pack_stuffing_length in here, skip the first 77 bits. psPacketBuffer.setPosition(9); @@ -205,7 +205,7 @@ public int read(ExtractorInput input, PositionHolder seekPosition) throws IOExce return RESULT_CONTINUE; } else if (nextStartCode == SYSTEM_HEADER_START_CODE) { // We just skip all this, but we need to get the length first. - input.peekFully(psPacketBuffer.data, 0, 2); + input.peekFully(psPacketBuffer.getData(), 0, 2); // Length is the next 2 bytes. psPacketBuffer.setPosition(0); @@ -260,7 +260,7 @@ public int read(ExtractorInput input, PositionHolder seekPosition) throws IOExce } // The next 2 bytes are the length. Once we have that we can consume the complete packet. - input.peekFully(psPacketBuffer.data, 0, 2); + input.peekFully(psPacketBuffer.getData(), 0, 2); psPacketBuffer.setPosition(0); int payloadLength = psPacketBuffer.readUnsignedShort(); int pesLength = payloadLength + 6; @@ -271,7 +271,7 @@ public int read(ExtractorInput input, PositionHolder seekPosition) throws IOExce } else { psPacketBuffer.reset(pesLength); // Read the whole packet and the header for consumption. - input.readFully(psPacketBuffer.data, 0, pesLength); + input.readFully(psPacketBuffer.getData(), 0, pesLength); psPacketBuffer.setPosition(6); payloadReader.consume(psPacketBuffer); psPacketBuffer.setLimit(psPacketBuffer.capacity()); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/SectionReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/SectionReader.java index bc590c9d4c9..9fb01bde8d9 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/SectionReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/SectionReader.java @@ -88,7 +88,7 @@ public void consume(ParsableByteArray data, @Flags int flags) { } } int headerBytesToRead = Math.min(data.bytesLeft(), SECTION_HEADER_LENGTH - bytesRead); - data.readBytes(sectionData.data, bytesRead, headerBytesToRead); + data.readBytes(sectionData.getData(), bytesRead, headerBytesToRead); bytesRead += headerBytesToRead; if (bytesRead == SECTION_HEADER_LENGTH) { sectionData.reset(SECTION_HEADER_LENGTH); @@ -100,21 +100,21 @@ public void consume(ParsableByteArray data, @Flags int flags) { (((secondHeaderByte & 0x0F) << 8) | thirdHeaderByte) + SECTION_HEADER_LENGTH; if (sectionData.capacity() < totalSectionLength) { // Ensure there is enough space to keep the whole section. - byte[] bytes = sectionData.data; + byte[] bytes = sectionData.getData(); sectionData.reset( Math.min(MAX_SECTION_LENGTH, Math.max(totalSectionLength, bytes.length * 2))); - System.arraycopy(bytes, 0, sectionData.data, 0, SECTION_HEADER_LENGTH); + System.arraycopy(bytes, 0, sectionData.getData(), 0, SECTION_HEADER_LENGTH); } } } else { // Reading the body. int bodyBytesToRead = Math.min(data.bytesLeft(), totalSectionLength - bytesRead); - data.readBytes(sectionData.data, bytesRead, bodyBytesToRead); + data.readBytes(sectionData.getData(), bytesRead, bodyBytesToRead); bytesRead += bodyBytesToRead; if (bytesRead == totalSectionLength) { if (sectionSyntaxIndicator) { // This section has common syntax as defined in ISO/IEC 13818-1, section 2.4.4.11. - if (Util.crc32(sectionData.data, 0, totalSectionLength, 0xFFFFFFFF) != 0) { + if (Util.crc32(sectionData.getData(), 0, totalSectionLength, 0xFFFFFFFF) != 0) { // The CRC is invalid so discard the section. waitingForPayloadStart = true; return; diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/TsBinarySearchSeeker.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/TsBinarySearchSeeker.java index 8a1d2b2fdf2..3f4a58f0ec4 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/TsBinarySearchSeeker.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/TsBinarySearchSeeker.java @@ -79,7 +79,7 @@ public TimestampSearchResult searchForTimestamp(ExtractorInput input, long targe int bytesToSearch = (int) Math.min(TIMESTAMP_SEARCH_BYTES, input.getLength() - inputPosition); packetBuffer.reset(bytesToSearch); - input.peekFully(packetBuffer.data, /* offset= */ 0, bytesToSearch); + input.peekFully(packetBuffer.getData(), /* offset= */ 0, bytesToSearch); return searchForPcrValueInBuffer(packetBuffer, targetTimestamp, inputPosition); } @@ -94,7 +94,7 @@ private TimestampSearchResult searchForPcrValueInBuffer( while (packetBuffer.bytesLeft() >= TsExtractor.TS_PACKET_SIZE) { int startOfPacket = - TsUtil.findSyncBytePosition(packetBuffer.data, packetBuffer.getPosition(), limit); + TsUtil.findSyncBytePosition(packetBuffer.getData(), packetBuffer.getPosition(), limit); int endOfPacket = startOfPacket + TsExtractor.TS_PACKET_SIZE; if (endOfPacket > limit) { break; diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/TsDurationReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/TsDurationReader.java index a60d3fcb824..9a2cd19cbed 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/TsDurationReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/TsDurationReader.java @@ -132,7 +132,7 @@ private int readFirstPcrValue(ExtractorInput input, PositionHolder seekPositionH packetBuffer.reset(bytesToSearch); input.resetPeekPosition(); - input.peekFully(packetBuffer.data, /* offset= */ 0, bytesToSearch); + input.peekFully(packetBuffer.getData(), /* offset= */ 0, bytesToSearch); firstPcrValue = readFirstPcrValueFromBuffer(packetBuffer, pcrPid); isFirstPcrValueRead = true; @@ -145,7 +145,7 @@ private long readFirstPcrValueFromBuffer(ParsableByteArray packetBuffer, int pcr for (int searchPosition = searchStartPosition; searchPosition < searchEndPosition; searchPosition++) { - if (packetBuffer.data[searchPosition] != TsExtractor.TS_SYNC_BYTE) { + if (packetBuffer.getData()[searchPosition] != TsExtractor.TS_SYNC_BYTE) { continue; } long pcrValue = TsUtil.readPcrFromPacket(packetBuffer, searchPosition, pcrPid); @@ -168,7 +168,7 @@ private int readLastPcrValue(ExtractorInput input, PositionHolder seekPositionHo packetBuffer.reset(bytesToSearch); input.resetPeekPosition(); - input.peekFully(packetBuffer.data, /* offset= */ 0, bytesToSearch); + input.peekFully(packetBuffer.getData(), /* offset= */ 0, bytesToSearch); lastPcrValue = readLastPcrValueFromBuffer(packetBuffer, pcrPid); isLastPcrValueRead = true; @@ -181,7 +181,7 @@ private long readLastPcrValueFromBuffer(ParsableByteArray packetBuffer, int pcrP for (int searchPosition = searchEndPosition - 1; searchPosition >= searchStartPosition; searchPosition--) { - if (packetBuffer.data[searchPosition] != TsExtractor.TS_SYNC_BYTE) { + if (packetBuffer.getData()[searchPosition] != TsExtractor.TS_SYNC_BYTE) { continue; } long pcrValue = TsUtil.readPcrFromPacket(packetBuffer, searchPosition, pcrPid); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/TsExtractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/TsExtractor.java index f412a9822fc..2de442211cf 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/TsExtractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/TsExtractor.java @@ -192,7 +192,7 @@ public TsExtractor( @Override public boolean sniff(ExtractorInput input) throws IOException { - byte[] buffer = tsPacketBuffer.data; + byte[] buffer = tsPacketBuffer.getData(); input.peekFully(buffer, 0, TS_PACKET_SIZE * SNIFF_TS_PACKET_COUNT); for (int startPosCandidate = 0; startPosCandidate < TS_PACKET_SIZE; startPosCandidate++) { // Try to identify at least SNIFF_TS_PACKET_COUNT packets starting with TS_SYNC_BYTE. @@ -374,7 +374,7 @@ private void maybeOutputSeekMap(long inputLength) { } private boolean fillBufferWithAtLeastOnePacket(ExtractorInput input) throws IOException { - byte[] data = tsPacketBuffer.data; + byte[] data = tsPacketBuffer.getData(); // Shift bytes to the start of the buffer if there isn't enough space left at the end. if (BUFFER_SIZE - tsPacketBuffer.getPosition() < TS_PACKET_SIZE) { int bytesLeft = tsPacketBuffer.bytesLeft(); @@ -404,7 +404,8 @@ private boolean fillBufferWithAtLeastOnePacket(ExtractorInput input) throws IOEx private int findEndOfFirstTsPacketInBuffer() throws ParserException { int searchStart = tsPacketBuffer.getPosition(); int limit = tsPacketBuffer.limit(); - int syncBytePosition = TsUtil.findSyncBytePosition(tsPacketBuffer.data, searchStart, limit); + int syncBytePosition = + TsUtil.findSyncBytePosition(tsPacketBuffer.getData(), searchStart, limit); // Discard all bytes before the sync byte. // If sync byte is not found, this means discard the whole buffer. tsPacketBuffer.setPosition(syncBytePosition); @@ -710,8 +711,11 @@ private EsInfo readEsInfo(ParsableByteArray data, int length) { data.skipBytes(positionOfNextDescriptor - data.getPosition()); } data.setPosition(descriptorsEndPosition); - return new EsInfo(streamType, language, dvbSubtitleInfos, - Arrays.copyOfRange(data.data, descriptorsStartPosition, descriptorsEndPosition)); + return new EsInfo( + streamType, + language, + dvbSubtitleInfos, + Arrays.copyOfRange(data.getData(), descriptorsStartPosition, descriptorsEndPosition)); } } diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/wav/WavExtractor.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/wav/WavExtractor.java index 1d7b6b9c6e9..bae45007764 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/wav/WavExtractor.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/wav/WavExtractor.java @@ -465,7 +465,7 @@ private void writeSampleMetadata(int sampleFrames) { private void decode(byte[] input, int blockCount, ParsableByteArray output) { for (int blockIndex = 0; blockIndex < blockCount; blockIndex++) { for (int channelIndex = 0; channelIndex < header.numChannels; channelIndex++) { - decodeBlockForChannel(input, blockIndex, channelIndex, output.data); + decodeBlockForChannel(input, blockIndex, channelIndex, output.getData()); } } int decodedDataSize = numOutputFramesToBytes(framesPerBlock * blockCount); diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/wav/WavHeaderReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/wav/WavHeaderReader.java index bcc229f3e93..4387993f509 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/wav/WavHeaderReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/wav/WavHeaderReader.java @@ -54,7 +54,7 @@ public static WavHeader peek(ExtractorInput input) throws IOException { return null; } - input.peekFully(scratch.data, 0, 4); + input.peekFully(scratch.getData(), 0, 4); scratch.setPosition(0); int riffFormat = scratch.readInt(); if (riffFormat != WavUtil.WAVE_FOURCC) { @@ -70,7 +70,7 @@ public static WavHeader peek(ExtractorInput input) throws IOException { } Assertions.checkState(chunkHeader.size >= 16); - input.peekFully(scratch.data, 0, 16); + input.peekFully(scratch.getData(), 0, 16); scratch.setPosition(0); int audioFormatType = scratch.readLittleEndianUnsignedShort(); int numChannels = scratch.readLittleEndianUnsignedShort(); @@ -175,7 +175,7 @@ private ChunkHeader(int id, long size) { */ public static ChunkHeader peek(ExtractorInput input, ParsableByteArray scratch) throws IOException { - input.peekFully(scratch.data, /* offset= */ 0, /* length= */ SIZE_IN_BYTES); + input.peekFully(scratch.getData(), /* offset= */ 0, /* length= */ SIZE_IN_BYTES); scratch.setPosition(0); int id = scratch.readInt(); diff --git a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/FlacFrameReaderTest.java b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/FlacFrameReaderTest.java index 9150493ea33..c06bde39ad6 100644 --- a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/FlacFrameReaderTest.java +++ b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/FlacFrameReaderTest.java @@ -47,7 +47,7 @@ public void checkAndReadFrameHeader_validData_updatesPosition() throws Exception "flac/bear_one_metadata_block.flac", streamMetadataHolder); int frameStartMarker = FlacMetadataReader.getFrameStartMarker(input); ParsableByteArray scratch = new ParsableByteArray(FlacConstants.MAX_FRAME_HEADER_SIZE); - input.read(scratch.data, 0, FlacConstants.MAX_FRAME_HEADER_SIZE); + input.read(scratch.getData(), 0, FlacConstants.MAX_FRAME_HEADER_SIZE); FlacFrameReader.checkAndReadFrameHeader( scratch, @@ -67,7 +67,7 @@ public void checkAndReadFrameHeader_validData_isTrue() throws Exception { "flac/bear_one_metadata_block.flac", streamMetadataHolder); int frameStartMarker = FlacMetadataReader.getFrameStartMarker(input); ParsableByteArray scratch = new ParsableByteArray(FlacConstants.MAX_FRAME_HEADER_SIZE); - input.read(scratch.data, 0, FlacConstants.MAX_FRAME_HEADER_SIZE); + input.read(scratch.getData(), 0, FlacConstants.MAX_FRAME_HEADER_SIZE); boolean result = FlacFrameReader.checkAndReadFrameHeader( @@ -90,7 +90,7 @@ public void checkAndReadFrameHeader_validData_writesSampleNumber() throws Except // Skip first frame. input.skip(5030); ParsableByteArray scratch = new ParsableByteArray(FlacConstants.MAX_FRAME_HEADER_SIZE); - input.read(scratch.data, 0, FlacConstants.MAX_FRAME_HEADER_SIZE); + input.read(scratch.getData(), 0, FlacConstants.MAX_FRAME_HEADER_SIZE); SampleNumberHolder sampleNumberHolder = new SampleNumberHolder(); FlacFrameReader.checkAndReadFrameHeader( @@ -107,7 +107,7 @@ public void checkAndReadFrameHeader_invalidData_isFalse() throws Exception { buildExtractorInputReadingFromFirstFrame( "flac/bear_one_metadata_block.flac", streamMetadataHolder); ParsableByteArray scratch = new ParsableByteArray(FlacConstants.MAX_FRAME_HEADER_SIZE); - input.read(scratch.data, 0, FlacConstants.MAX_FRAME_HEADER_SIZE); + input.read(scratch.getData(), 0, FlacConstants.MAX_FRAME_HEADER_SIZE); // The first bytes of the frame are not equal to the frame start marker. boolean result = @@ -276,7 +276,7 @@ public void readFrameBlockSizeSamplesFromKey_keyBetween6And7_returnsCorrectBlock // Skip to block size bits of last frame. input.skipFully(164033); ParsableByteArray scratch = new ParsableByteArray(2); - input.readFully(scratch.data, 0, 2); + input.readFully(scratch.getData(), 0, 2); int result = FlacFrameReader.readFrameBlockSizeSamplesFromKey(scratch, /* blockSizeKey= */ 7); diff --git a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/FlacMetadataReaderTest.java b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/FlacMetadataReaderTest.java index a6a2cd35b68..9686d3bc3af 100644 --- a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/FlacMetadataReaderTest.java +++ b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/FlacMetadataReaderTest.java @@ -318,7 +318,7 @@ public void readSeekTableMetadataBlock_updatesPosition() throws Exception { input.skipFully(FlacConstants.STREAM_MARKER_SIZE + FlacConstants.STREAM_INFO_BLOCK_SIZE); int seekTableBlockSize = 598; ParsableByteArray scratch = new ParsableByteArray(seekTableBlockSize); - input.read(scratch.data, 0, seekTableBlockSize); + input.read(scratch.getData(), 0, seekTableBlockSize); FlacMetadataReader.readSeekTableMetadataBlock(scratch); @@ -332,7 +332,7 @@ public void readSeekTableMetadataBlock_returnsCorrectSeekPoints() throws Excepti input.skipFully(FlacConstants.STREAM_MARKER_SIZE + FlacConstants.STREAM_INFO_BLOCK_SIZE); int seekTableBlockSize = 598; ParsableByteArray scratch = new ParsableByteArray(seekTableBlockSize); - input.read(scratch.data, 0, seekTableBlockSize); + input.read(scratch.getData(), 0, seekTableBlockSize); FlacStreamMetadata.SeekTable seekTable = FlacMetadataReader.readSeekTableMetadataBlock(scratch); diff --git a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/OggPacketTest.java b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/OggPacketTest.java index 492b542e95e..b534ce696aa 100644 --- a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/OggPacketTest.java +++ b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/OggPacketTest.java @@ -190,7 +190,7 @@ private void assertReadPacket(FakeExtractorInput extractorInput, byte[] expected throws IOException { assertThat(readPacket(extractorInput)).isTrue(); ParsableByteArray payload = oggPacket.getPayload(); - assertThat(Arrays.copyOf(payload.data, payload.limit())).isEqualTo(expected); + assertThat(Arrays.copyOf(payload.getData(), payload.limit())).isEqualTo(expected); } private void assertReadEof(FakeExtractorInput extractorInput) throws IOException { diff --git a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/VorbisReaderTest.java b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/VorbisReaderTest.java index c7edff700a7..03f2334e87d 100644 --- a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/VorbisReaderTest.java +++ b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/VorbisReaderTest.java @@ -49,10 +49,10 @@ public void appendNumberOfSamples() { buffer.setLimit(0); VorbisReader.appendNumberOfSamples(buffer, 0x01234567); assertThat(buffer.limit()).isEqualTo(4); - assertThat(buffer.data[0]).isEqualTo(0x67); - assertThat(buffer.data[1]).isEqualTo(0x45); - assertThat(buffer.data[2]).isEqualTo(0x23); - assertThat(buffer.data[3]).isEqualTo(0x01); + assertThat(buffer.getData()[0]).isEqualTo(0x67); + assertThat(buffer.getData()[1]).isEqualTo(0x45); + assertThat(buffer.getData()[2]).isEqualTo(0x23); + assertThat(buffer.getData()[3]).isEqualTo(0x01); } @Test diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaChunk.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaChunk.java index 5801ee5cf7f..545b60b04d8 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaChunk.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaChunk.java @@ -455,7 +455,7 @@ private DefaultExtractorInput prepareExtraction(DataSource dataSource, DataSpec private long peekId3PrivTimestamp(ExtractorInput input) throws IOException { input.resetPeekPosition(); try { - input.peekFully(scratchId3Data.data, 0, Id3Decoder.ID3_HEADER_LENGTH); + input.peekFully(scratchId3Data.getData(), 0, Id3Decoder.ID3_HEADER_LENGTH); } catch (EOFException e) { // The input isn't long enough for there to be any ID3 data. return C.TIME_UNSET; @@ -469,12 +469,12 @@ private long peekId3PrivTimestamp(ExtractorInput input) throws IOException { int id3Size = scratchId3Data.readSynchSafeInt(); int requiredCapacity = id3Size + Id3Decoder.ID3_HEADER_LENGTH; if (requiredCapacity > scratchId3Data.capacity()) { - byte[] data = scratchId3Data.data; + byte[] data = scratchId3Data.getData(); scratchId3Data.reset(requiredCapacity); - System.arraycopy(data, 0, scratchId3Data.data, 0, Id3Decoder.ID3_HEADER_LENGTH); + System.arraycopy(data, 0, scratchId3Data.getData(), 0, Id3Decoder.ID3_HEADER_LENGTH); } - input.peekFully(scratchId3Data.data, Id3Decoder.ID3_HEADER_LENGTH, id3Size); - Metadata metadata = id3Decoder.decode(scratchId3Data.data, id3Size); + input.peekFully(scratchId3Data.getData(), Id3Decoder.ID3_HEADER_LENGTH, id3Size); + Metadata metadata = id3Decoder.decode(scratchId3Data.getData(), id3Size); if (metadata == null) { return C.TIME_UNSET; } @@ -485,7 +485,7 @@ private long peekId3PrivTimestamp(ExtractorInput input) throws IOException { PrivFrame privFrame = (PrivFrame) frame; if (PRIV_TIMESTAMP_FRAME_OWNER.equals(privFrame.owner)) { System.arraycopy( - privFrame.privateData, 0, scratchId3Data.data, 0, 8 /* timestamp size */); + privFrame.privateData, 0, scratchId3Data.getData(), 0, 8 /* timestamp size */); scratchId3Data.reset(8); // The top 31 bits should be zeros, but explicitly zero them to wrap in the case that the // streaming provider forgot. See: https://github.com/google/ExoPlayer/pull/3495.