From bf9f49a91bdba6a2ddc28d88c6e87e699e965411 Mon Sep 17 00:00:00 2001 From: kimvde Date: Mon, 16 Dec 2019 18:29:27 +0000 Subject: [PATCH] Implement seeking from seektable in FLAC extractor PiperOrigin-RevId: 285799995 --- .../exoplayer2/extractor/FlacFrameReader.java | 84 ++++----- .../extractor/FlacMetadataReader.java | 61 ++++++- .../extractor/FlacSeekTableSeekMap.java | 84 +++++++++ .../extractor/flac/FlacExtractor.java | 46 ++--- .../exoplayer2/extractor/ogg/FlacReader.java | 72 ++------ .../exoplayer2/util/FlacConstants.java | 9 + .../exoplayer2/util/FlacStreamMetadata.java | 39 ++++- .../src/test/assets/flac/bear.flac.3.dump | 8 +- .../bear_no_min_max_frame_size.flac.3.dump | 8 +- ...ear_no_min_max_frame_size.flac.unklen.dump | 164 ------------------ .../flac/bear_no_num_samples.flac.0.dump | 4 +- .../bear_no_seek_table_no_num_samples.flac | Bin 0 -> 172713 bytes ..._no_seek_table_no_num_samples.flac.0.dump} | 4 +- .../flac/bear_uncommon_sample_rate.flac | Bin 152374 -> 152316 bytes .../bear_uncommon_sample_rate.flac.0.dump | 2 +- .../bear_uncommon_sample_rate.flac.1.dump | 2 +- .../bear_uncommon_sample_rate.flac.2.dump | 2 +- .../bear_uncommon_sample_rate.flac.3.dump | 10 +- ...bear_uncommon_sample_rate.flac.unklen.dump | 140 --------------- .../assets/flac/bear_with_id3.flac.1.dump | 123 ------------- .../assets/flac/bear_with_id3.flac.2.dump | 79 --------- .../assets/flac/bear_with_id3.flac.3.dump | 35 ---- .../flac/bear_with_id3.flac.unklen.dump | 163 ----------------- .../flac/bear_with_id3_disabled.flac.3.dump | 8 +- .../bear_with_id3_disabled.flac.unklen.dump | 164 ------------------ .../flac/bear_with_id3_enabled.flac.3.dump | 8 +- .../bear_with_id3_enabled.flac.unklen.dump | 164 ------------------ .../assets/flac/bear_with_picture.flac.3.dump | 8 +- .../flac/bear_with_picture.flac.unklen.dump | 164 ------------------ .../bear_with_vorbis_comments.flac.3.dump | 8 +- ...bear_with_vorbis_comments.flac.unklen.dump | 164 ------------------ .../extractor/flac/FlacExtractorTest.java | 80 +++++++-- .../exoplayer2/testutil/ExtractorAsserts.java | 7 +- 33 files changed, 383 insertions(+), 1531 deletions(-) create mode 100644 library/core/src/main/java/com/google/android/exoplayer2/extractor/FlacSeekTableSeekMap.java delete mode 100644 library/core/src/test/assets/flac/bear_no_min_max_frame_size.flac.unklen.dump create mode 100644 library/core/src/test/assets/flac/bear_no_seek_table_no_num_samples.flac rename library/core/src/test/assets/flac/{bear.flac.unklen.dump => bear_no_seek_table_no_num_samples.flac.0.dump} (98%) delete mode 100644 library/core/src/test/assets/flac/bear_uncommon_sample_rate.flac.unklen.dump delete mode 100644 library/core/src/test/assets/flac/bear_with_id3.flac.1.dump delete mode 100644 library/core/src/test/assets/flac/bear_with_id3.flac.2.dump delete mode 100644 library/core/src/test/assets/flac/bear_with_id3.flac.3.dump delete mode 100644 library/core/src/test/assets/flac/bear_with_id3.flac.unklen.dump delete mode 100644 library/core/src/test/assets/flac/bear_with_id3_disabled.flac.unklen.dump delete mode 100644 library/core/src/test/assets/flac/bear_with_id3_enabled.flac.unklen.dump delete mode 100644 library/core/src/test/assets/flac/bear_with_picture.flac.unklen.dump delete mode 100644 library/core/src/test/assets/flac/bear_with_vorbis_comments.flac.unklen.dump diff --git a/library/core/src/main/java/com/google/android/exoplayer2/extractor/FlacFrameReader.java b/library/core/src/main/java/com/google/android/exoplayer2/extractor/FlacFrameReader.java index 58397b3e21..1e498cb677 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/extractor/FlacFrameReader.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/extractor/FlacFrameReader.java @@ -22,7 +22,10 @@ import com.google.android.exoplayer2.util.ParsableByteArray; import com.google.android.exoplayer2.util.Util; import java.io.IOException; -/** Reads and peeks FLAC frame elements. */ +/** + * Reads and peeks FLAC frame elements according to the FLAC format specification. + */ public final class FlacFrameReader { /** Holds a sample number. */ @@ -35,10 +38,10 @@ public final class FlacFrameReader { * Checks whether the given FLAC frame header is valid and, if so, reads it and writes the frame * first sample number in {@code sampleNumberHolder}. * - *

If the header is valid, the position of {@code scratch} is moved to the byte following it. + *

If the header is valid, the position of {@code data} is moved to the byte following it. * Otherwise, there is no guarantee on the position. * - * @param scratch The array to read the data from, whose position must correspond to the frame + * @param data The array to read the data from, whose position must correspond to the frame * header. * @param flacStreamMetadata The stream metadata. * @param frameStartMarker The frame start marker of the stream. @@ -46,13 +49,13 @@ public final class FlacFrameReader { * @return Whether the frame header is valid. */ public static boolean checkAndReadFrameHeader( - ParsableByteArray scratch, + ParsableByteArray data, FlacStreamMetadata flacStreamMetadata, int frameStartMarker, SampleNumberHolder sampleNumberHolder) { - int frameStartPosition = scratch.getPosition(); + int frameStartPosition = data.getPosition(); - long frameHeaderBytes = scratch.readUnsignedInt(); + long frameHeaderBytes = data.readUnsignedInt(); if (frameHeaderBytes >>> 16 != frameStartMarker) { return false; } @@ -67,10 +70,10 @@ public final class FlacFrameReader { && checkBitsPerSample(bitsPerSampleKey, flacStreamMetadata) && !reservedBit && checkAndReadFirstSampleNumber( - scratch, flacStreamMetadata, isBlockSizeVariable, sampleNumberHolder) - && checkAndReadBlockSizeSamples(scratch, flacStreamMetadata, blockSizeKey) - && checkAndReadSampleRate(scratch, flacStreamMetadata, sampleRateKey) - && checkAndReadCrc(scratch, frameStartPosition); + data, flacStreamMetadata, isBlockSizeVariable, sampleNumberHolder) + && checkAndReadBlockSizeSamples(data, flacStreamMetadata, blockSizeKey) + && checkAndReadSampleRate(data, flacStreamMetadata, sampleRateKey) + && checkAndReadCrc(data, frameStartPosition); } /** @@ -161,12 +164,12 @@ public final class FlacFrameReader { /** * Reads the given block size. * - * @param scratch The array to read the data from, whose position must correspond to the block - * size bits. + * @param data The array to read the data from, whose position must correspond to the block size + * bits. * @param blockSizeKey The key in the block size lookup table. * @return The block size in samples. */ - public static int readFrameBlockSizeSamplesFromKey(ParsableByteArray scratch, int blockSizeKey) { + public static int readFrameBlockSizeSamplesFromKey(ParsableByteArray data, int blockSizeKey) { switch (blockSizeKey) { case 1: return 192; @@ -176,9 +179,9 @@ public final class FlacFrameReader { case 5: return 576 << (blockSizeKey - 2); case 6: - return scratch.readUnsignedByte() + 1; + return data.readUnsignedByte() + 1; case 7: - return scratch.readUnsignedShort() + 1; + return data.readUnsignedShort() + 1; case 8: case 9: case 10: @@ -230,10 +233,10 @@ public final class FlacFrameReader { * Checks whether the given sample number is valid and, if so, reads it and writes it in {@code * sampleNumberHolder}. * - *

If the sample number is valid, the position of {@code scratch} is moved to the byte - * following it. Otherwise, there is no guarantee on the position. + *

If the sample number is valid, the position of {@code data} is moved to the byte following + * it. Otherwise, there is no guarantee on the position. * - * @param scratch The array to read the data from, whose position must correspond to the sample + * @param data The array to read the data from, whose position must correspond to the sample * number data. * @param flacStreamMetadata The stream metadata. * @param isBlockSizeVariable Whether the stream blocking strategy is variable block size or fixed @@ -242,13 +245,13 @@ public final class FlacFrameReader { * @return Whether the sample number is valid. */ private static boolean checkAndReadFirstSampleNumber( - ParsableByteArray scratch, + ParsableByteArray data, FlacStreamMetadata flacStreamMetadata, boolean isBlockSizeVariable, SampleNumberHolder sampleNumberHolder) { long utf8Value; try { - utf8Value = scratch.readUtf8EncodedLong(); + utf8Value = data.readUtf8EncodedLong(); } catch (NumberFormatException e) { return false; } @@ -262,18 +265,18 @@ public final class FlacFrameReader { * Checks whether the given frame block size key and block size bits are valid and, if so, reads * the block size bits. * - *

If the block size is valid, the position of {@code scratch} is moved to the byte following - * the block size bits. Otherwise, there is no guarantee on the position. + *

If the block size is valid, the position of {@code data} is moved to the byte following the + * block size bits. Otherwise, there is no guarantee on the position. * - * @param scratch The array to read the data from, whose position must correspond to the block - * size bits. + * @param data The array to read the data from, whose position must correspond to the block size + * bits. * @param flacStreamMetadata The stream metadata. * @param blockSizeKey The key in the block size lookup table. * @return Whether the block size is valid. */ private static boolean checkAndReadBlockSizeSamples( - ParsableByteArray scratch, FlacStreamMetadata flacStreamMetadata, int blockSizeKey) { - int blockSizeSamples = readFrameBlockSizeSamplesFromKey(scratch, blockSizeKey); + ParsableByteArray data, FlacStreamMetadata flacStreamMetadata, int blockSizeKey) { + int blockSizeSamples = readFrameBlockSizeSamplesFromKey(data, blockSizeKey); return blockSizeSamples != -1 && blockSizeSamples <= flacStreamMetadata.maxBlockSizeSamples; } @@ -281,26 +284,25 @@ public final class FlacFrameReader { * Checks whether the given sample rate key and sample rate bits are valid and, if so, reads the * sample rate bits. * - *

If the sample rate is valid, the position of {@code scratch} is moved to the byte following - * the sample rate bits. Otherwise, there is no guarantee on the position. + *

If the sample rate is valid, the position of {@code data} is moved to the byte following the + * sample rate bits. Otherwise, there is no guarantee on the position. * - * @param scratch The array to read the data from, whose position must indicate the sample rate - * bits. + * @param data The array to read the data from, whose position must indicate the sample rate bits. * @param flacStreamMetadata The stream metadata. * @param sampleRateKey The key in the sample rate lookup table. * @return Whether the sample rate is valid. */ private static boolean checkAndReadSampleRate( - ParsableByteArray scratch, FlacStreamMetadata flacStreamMetadata, int sampleRateKey) { + ParsableByteArray data, FlacStreamMetadata flacStreamMetadata, int sampleRateKey) { int expectedSampleRate = flacStreamMetadata.sampleRate; if (sampleRateKey == 0) { return true; } else if (sampleRateKey <= 11) { return sampleRateKey == flacStreamMetadata.sampleRateLookupKey; } else if (sampleRateKey == 12) { - return scratch.readUnsignedByte() * 1000 == expectedSampleRate; + return data.readUnsignedByte() * 1000 == expectedSampleRate; } else if (sampleRateKey <= 14) { - int sampleRate = scratch.readUnsignedShort(); + int sampleRate = data.readUnsignedShort(); if (sampleRateKey == 14) { sampleRate *= 10; } @@ -313,20 +315,20 @@ public final class FlacFrameReader { /** * Checks whether the given CRC is valid and, if so, reads it. * - *

If the CRC is valid, the position of {@code scratch} is moved to the byte following it. + *

If the CRC is valid, the position of {@code data} is moved to the byte following it. * Otherwise, there is no guarantee on the position. * - *

The {@code scratch} array must contain the whole frame header. + *

The {@code data} array must contain the whole frame header. * - * @param scratch The array to read the data from, whose position must indicate the CRC. - * @param frameStartPosition The frame start offset in {@code scratch}. + * @param data The array to read the data from, whose position must indicate the CRC. + * @param frameStartPosition The frame start offset in {@code data}. * @return Whether the CRC is valid. */ - private static boolean checkAndReadCrc(ParsableByteArray scratch, int frameStartPosition) { - int crc = scratch.readUnsignedByte(); - int frameEndPosition = scratch.getPosition(); + private static boolean checkAndReadCrc(ParsableByteArray data, int frameStartPosition) { + int crc = data.readUnsignedByte(); + int frameEndPosition = data.getPosition(); int expectedCrc = - Util.crc8(scratch.data, frameStartPosition, frameEndPosition - 1, /* initialValue= */ 0); + Util.crc8(data.data, frameStartPosition, frameEndPosition - 1, /* initialValue= */ 0); return crc == expectedCrc; } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/extractor/FlacMetadataReader.java b/library/core/src/main/java/com/google/android/exoplayer2/extractor/FlacMetadataReader.java index c3b0d75300..49d4558ddc 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/extractor/FlacMetadataReader.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/extractor/FlacMetadataReader.java @@ -32,7 +32,10 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -/** Reads and peeks FLAC stream metadata elements from an {@link ExtractorInput}. */ +/** + * Reads and peeks FLAC stream metadata elements according to the FLAC format specification. + */ public final class FlacMetadataReader { /** Holds a {@link FlacStreamMetadata}. */ @@ -47,9 +50,7 @@ public final class FlacMetadataReader { private static final int STREAM_MARKER = 0x664C6143; // ASCII for "fLaC" private static final int SYNC_CODE = 0x3FFE; - private static final int STREAM_INFO_TYPE = 0; - private static final int VORBIS_COMMENT_TYPE = 4; - private static final int PICTURE_TYPE = 6; + private static final int SEEK_POINT_SIZE = 18; /** * Peeks ID3 Data. @@ -167,18 +168,21 @@ public final class FlacMetadataReader { boolean isLastMetadataBlock = scratch.readBit(); int type = scratch.readBits(7); int length = FlacConstants.METADATA_BLOCK_HEADER_SIZE + scratch.readBits(24); - if (type == STREAM_INFO_TYPE) { + if (type == FlacConstants.METADATA_TYPE_STREAM_INFO) { metadataHolder.flacStreamMetadata = readStreamInfoBlock(input); } else { FlacStreamMetadata flacStreamMetadata = metadataHolder.flacStreamMetadata; if (flacStreamMetadata == null) { throw new IllegalArgumentException(); } - if (type == VORBIS_COMMENT_TYPE) { + if (type == FlacConstants.METADATA_TYPE_SEEK_TABLE) { + FlacStreamMetadata.SeekTable seekTable = readSeekTableMetadataBlock(input, length); + metadataHolder.flacStreamMetadata = flacStreamMetadata.copyWithSeekTable(seekTable); + } else if (type == FlacConstants.METADATA_TYPE_VORBIS_COMMENT) { List vorbisComments = readVorbisCommentMetadataBlock(input, length); metadataHolder.flacStreamMetadata = flacStreamMetadata.copyWithVorbisComments(vorbisComments); - } else if (type == PICTURE_TYPE) { + } else if (type == FlacConstants.METADATA_TYPE_PICTURE) { PictureFrame pictureFrame = readPictureMetadataBlock(input, length); metadataHolder.flacStreamMetadata = flacStreamMetadata.copyWithPictureFrames(Collections.singletonList(pictureFrame)); @@ -190,6 +194,42 @@ public final class FlacMetadataReader { return isLastMetadataBlock; } + /** + * Reads a FLAC seek table metadata block. + * + *

The position of {@code data} is moved to the byte following the seek table metadata block + * (placeholder points included). + * + * @param data The array to read the data from, whose position must correspond to the seek table + * metadata block (header included). + * @return The seek table, without the placeholder points. + */ + public static FlacStreamMetadata.SeekTable readSeekTableMetadataBlock(ParsableByteArray data) { + data.skipBytes(1); + int length = data.readUnsignedInt24(); + + long seekTableEndPosition = data.getPosition() + length; + int seekPointCount = length / SEEK_POINT_SIZE; + long[] pointSampleNumbers = new long[seekPointCount]; + long[] pointOffsets = new long[seekPointCount]; + for (int i = 0; i < seekPointCount; i++) { + // The sample number is expected to fit in a signed long, except if it is a placeholder, in + // which case its value is -1. + long sampleNumber = data.readLong(); + if (sampleNumber == -1) { + pointSampleNumbers = Arrays.copyOf(pointSampleNumbers, i); + pointOffsets = Arrays.copyOf(pointOffsets, i); + break; + } + pointSampleNumbers[i] = sampleNumber; + pointOffsets[i] = data.readLong(); + data.skipBytes(2); + } + + data.skipBytes((int) (seekTableEndPosition - data.getPosition())); + return new FlacStreamMetadata.SeekTable(pointSampleNumbers, pointOffsets); + } + /** * Returns the frame start marker, consisting of the 2 first bytes of the first frame. * @@ -227,6 +267,13 @@ public final class FlacMetadataReader { scratchData, /* offset= */ FlacConstants.METADATA_BLOCK_HEADER_SIZE); } + private static FlacStreamMetadata.SeekTable readSeekTableMetadataBlock( + ExtractorInput input, int length) throws IOException, InterruptedException { + ParsableByteArray scratch = new ParsableByteArray(length); + input.readFully(scratch.data, 0, length); + return readSeekTableMetadataBlock(scratch); + } + private static List readVorbisCommentMetadataBlock(ExtractorInput input, int length) throws IOException, InterruptedException { ParsableByteArray scratch = new ParsableByteArray(length); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/extractor/FlacSeekTableSeekMap.java b/library/core/src/main/java/com/google/android/exoplayer2/extractor/FlacSeekTableSeekMap.java new file mode 100644 index 0000000000..a711f09e2f --- /dev/null +++ b/library/core/src/main/java/com/google/android/exoplayer2/extractor/FlacSeekTableSeekMap.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.exoplayer2.extractor; + +import com.google.android.exoplayer2.C; +import com.google.android.exoplayer2.util.Assertions; +import com.google.android.exoplayer2.util.FlacStreamMetadata; +import com.google.android.exoplayer2.util.Util; + +/** + * A {@link SeekMap} implementation for FLAC streams that contain a seek table. + */ +public final class FlacSeekTableSeekMap implements SeekMap { + + private final FlacStreamMetadata flacStreamMetadata; + private final long firstFrameOffset; + + /** + * Creates a seek map from the FLAC stream seek table. + * + * @param flacStreamMetadata The stream metadata. + * @param firstFrameOffset The byte offset of the first frame in the stream. + */ + public FlacSeekTableSeekMap(FlacStreamMetadata flacStreamMetadata, long firstFrameOffset) { + this.flacStreamMetadata = flacStreamMetadata; + this.firstFrameOffset = firstFrameOffset; + } + + @Override + public boolean isSeekable() { + return true; + } + + @Override + public long getDurationUs() { + return flacStreamMetadata.getDurationUs(); + } + + @Override + public SeekPoints getSeekPoints(long timeUs) { + Assertions.checkNotNull(flacStreamMetadata.seekTable); + long[] pointSampleNumbers = flacStreamMetadata.seekTable.pointSampleNumbers; + long[] pointOffsets = flacStreamMetadata.seekTable.pointOffsets; + + long targetSampleNumber = flacStreamMetadata.getSampleNumber(timeUs); + int index = + Util.binarySearchFloor( + pointSampleNumbers, + targetSampleNumber, + /* inclusive= */ true, + /* stayInBounds= */ false); + + long seekPointSampleNumber = index == -1 ? 0 : pointSampleNumbers[index]; + long seekPointOffsetFromFirstFrame = index == -1 ? 0 : pointOffsets[index]; + SeekPoint seekPoint = getSeekPoint(seekPointSampleNumber, seekPointOffsetFromFirstFrame); + if (seekPoint.timeUs == timeUs || index == pointSampleNumbers.length - 1) { + return new SeekPoints(seekPoint); + } else { + SeekPoint secondSeekPoint = + getSeekPoint(pointSampleNumbers[index + 1], pointOffsets[index + 1]); + return new SeekPoints(seekPoint, secondSeekPoint); + } + } + + private SeekPoint getSeekPoint(long sampleNumber, long offsetFromFirstFrame) { + long seekTimeUs = sampleNumber * C.MICROS_PER_SECOND / flacStreamMetadata.sampleRate; + long seekPosition = firstFrameOffset + offsetFromFirstFrame; + return new SeekPoint(seekTimeUs, seekPosition); + } +} diff --git a/library/core/src/main/java/com/google/android/exoplayer2/extractor/flac/FlacExtractor.java b/library/core/src/main/java/com/google/android/exoplayer2/extractor/flac/FlacExtractor.java index 078fdddbd1..831a900b94 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/extractor/flac/FlacExtractor.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/extractor/flac/FlacExtractor.java @@ -27,6 +27,7 @@ import com.google.android.exoplayer2.extractor.ExtractorsFactory; import com.google.android.exoplayer2.extractor.FlacFrameReader; import com.google.android.exoplayer2.extractor.FlacFrameReader.SampleNumberHolder; import com.google.android.exoplayer2.extractor.FlacMetadataReader; +import com.google.android.exoplayer2.extractor.FlacSeekTableSeekMap; import com.google.android.exoplayer2.extractor.PositionHolder; import com.google.android.exoplayer2.extractor.SeekMap; import com.google.android.exoplayer2.extractor.TrackOutput; @@ -41,7 +42,6 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; -// TODO: implement seeking using the optional seek table. /** * Extracts data from FLAC container format. * @@ -175,11 +175,10 @@ public final class FlacExtractor implements Extractor { public void seek(long position, long timeUs) { if (position == 0) { state = STATE_READ_ID3_METADATA; - currentFrameFirstSampleNumber = 0; } else if (binarySearchSeeker != null) { - currentFrameFirstSampleNumber = SAMPLE_NUMBER_UNKNOWN; binarySearchSeeker.setSeekTargetUs(timeUs); } + currentFrameFirstSampleNumber = timeUs == 0 ? 0 : SAMPLE_NUMBER_UNKNOWN; currentFrameBytesWritten = 0; scratch.reset(); } @@ -231,7 +230,7 @@ public final class FlacExtractor implements Extractor { castNonNull(extractorOutput) .seekMap( getSeekMap( - /* firstFramePosition= */ (int) input.getPosition(), + /* firstFramePosition= */ input.getPosition(), /* streamLength= */ input.getLength())); state = STATE_READ_FRAMES; @@ -242,7 +241,7 @@ public final class FlacExtractor implements Extractor { Assertions.checkNotNull(trackOutput); Assertions.checkNotNull(flacStreamMetadata); - // Handle pending seek if necessary. + // Handle pending binary search seek if necessary. if (binarySearchSeeker != null && binarySearchSeeker.isSeeking()) { return binarySearchSeeker.handlePendingSeek(input, seekPosition); } @@ -299,39 +298,42 @@ public final class FlacExtractor implements Extractor { return Extractor.RESULT_CONTINUE; } - private SeekMap getSeekMap(int firstFramePosition, long streamLength) { + private SeekMap getSeekMap(long firstFramePosition, long streamLength) { Assertions.checkNotNull(flacStreamMetadata); - if (streamLength == C.LENGTH_UNSET || flacStreamMetadata.totalSamples == 0) { + if (flacStreamMetadata.seekTable != null) { + return new FlacSeekTableSeekMap(flacStreamMetadata, firstFramePosition); + } else if (streamLength != C.LENGTH_UNSET && flacStreamMetadata.totalSamples > 0) { + binarySearchSeeker = + new FlacBinarySearchSeeker( + flacStreamMetadata, frameStartMarker, firstFramePosition, streamLength); + return binarySearchSeeker.getSeekMap(); + } else { return new SeekMap.Unseekable(flacStreamMetadata.getDurationUs()); } - binarySearchSeeker = - new FlacBinarySearchSeeker( - flacStreamMetadata, frameStartMarker, firstFramePosition, streamLength); - return binarySearchSeeker.getSeekMap(); } /** - * Searches for the start of a frame in {@code scratch}. + * Searches for the start of a frame in {@code data}. * *

* - * @param scratch The array to be searched. - * @param foundEndOfInput If the end of input was met when filling in the {@code scratch}. + * @param data The array to be searched. + * @param foundEndOfInput If the end of input was met when filling in the {@code data}. * @return The number of the first sample in the frame found, or {@code SAMPLE_NUMBER_UNKNOWN} if * the search was not successful. */ - private long findFrame(ParsableByteArray scratch, boolean foundEndOfInput) { + private long findFrame(ParsableByteArray data, boolean foundEndOfInput) { Assertions.checkNotNull(flacStreamMetadata); - int frameOffset = scratch.getPosition(); - while (frameOffset <= scratch.limit() - FlacConstants.MAX_FRAME_HEADER_SIZE) { - scratch.setPosition(frameOffset); + int frameOffset = data.getPosition(); + while (frameOffset <= data.limit() - FlacConstants.MAX_FRAME_HEADER_SIZE) { + data.setPosition(frameOffset); if (FlacFrameReader.checkAndReadFrameHeader( - scratch, flacStreamMetadata, frameStartMarker, sampleNumberHolder)) { - scratch.setPosition(frameOffset); + data, flacStreamMetadata, frameStartMarker, sampleNumberHolder)) { + data.setPosition(frameOffset); return sampleNumberHolder.sampleNumber; } frameOffset++; @@ -339,9 +341,9 @@ public final class FlacExtractor implements Extractor { if (foundEndOfInput) { // Reached the end of the file. Assume it's the end of the frame. - scratch.setPosition(scratch.limit()); + data.setPosition(data.limit()); } else { - scratch.setPosition(frameOffset); + data.setPosition(frameOffset); } return SAMPLE_NUMBER_UNKNOWN; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/extractor/ogg/FlacReader.java b/library/core/src/main/java/com/google/android/exoplayer2/extractor/ogg/FlacReader.java index 9889c7f220..f99b2420cc 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/extractor/ogg/FlacReader.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/extractor/ogg/FlacReader.java @@ -17,8 +17,11 @@ package com.google.android.exoplayer2.extractor.ogg; import com.google.android.exoplayer2.extractor.ExtractorInput; import com.google.android.exoplayer2.extractor.FlacFrameReader; +import com.google.android.exoplayer2.extractor.FlacMetadataReader; +import com.google.android.exoplayer2.extractor.FlacSeekTableSeekMap; import com.google.android.exoplayer2.extractor.SeekMap; -import com.google.android.exoplayer2.extractor.SeekPoint; +import com.google.android.exoplayer2.util.Assertions; +import com.google.android.exoplayer2.util.FlacConstants; import com.google.android.exoplayer2.util.FlacStreamMetadata; import com.google.android.exoplayer2.util.ParsableByteArray; import com.google.android.exoplayer2.util.Util; @@ -31,7 +34,6 @@ import java.util.Arrays; /* package */ final class FlacReader extends StreamReader { private static final byte AUDIO_PACKET_TYPE = (byte) 0xFF; - private static final byte SEEKTABLE_PACKET_TYPE = 0x03; private static final int FRAME_HEADER_SAMPLE_NUMBER_OFFSET = 4; @@ -71,9 +73,11 @@ import java.util.Arrays; streamMetadata = new FlacStreamMetadata(data, 17); byte[] metadata = Arrays.copyOfRange(data, 9, packet.limit()); setupData.format = streamMetadata.getFormat(metadata, /* id3Metadata= */ null); - } else if ((data[0] & 0x7F) == SEEKTABLE_PACKET_TYPE) { + } else if ((data[0] & 0x7F) == FlacConstants.METADATA_TYPE_SEEK_TABLE) { flacOggSeeker = new FlacOggSeeker(); - flacOggSeeker.parseSeekTable(packet); + FlacStreamMetadata.SeekTable seekTable = + FlacMetadataReader.readSeekTableMetadataBlock(packet); + streamMetadata = streamMetadata.copyWithSeekTable(seekTable); } else if (isAudioPacket(data)) { if (flacOggSeeker != null) { flacOggSeeker.setFirstFrameOffset(position); @@ -96,13 +100,8 @@ import java.util.Arrays; return result; } - private class FlacOggSeeker implements OggSeeker, SeekMap { + private class FlacOggSeeker implements OggSeeker { - private static final int METADATA_LENGTH_OFFSET = 1; - private static final int SEEK_POINT_SIZE = 18; - - private long[] seekPointGranules; - private long[] seekPointOffsets; private long firstFrameOffset; private long pendingSeekGranule; @@ -115,27 +114,6 @@ import java.util.Arrays; this.firstFrameOffset = firstFrameOffset; } - /** - * Parses a FLAC file seek table metadata structure and initializes internal fields. - * - * @param data A {@link ParsableByteArray} including whole seek table metadata block. Its - * position should be set to the beginning of the block. - * @see FLAC format - * METADATA_BLOCK_SEEKTABLE - */ - public void parseSeekTable(ParsableByteArray data) { - data.skipBytes(METADATA_LENGTH_OFFSET); - int length = data.readUnsignedInt24(); - int numberOfSeekPoints = length / SEEK_POINT_SIZE; - seekPointGranules = new long[numberOfSeekPoints]; - seekPointOffsets = new long[numberOfSeekPoints]; - for (int i = 0; i < numberOfSeekPoints; i++) { - seekPointGranules[i] = data.readLong(); - seekPointOffsets[i] = data.readLong(); - data.skipBytes(2); // Skip "Number of samples in the target frame." - } - } - @Override public long read(ExtractorInput input) throws IOException, InterruptedException { if (pendingSeekGranule >= 0) { @@ -148,40 +126,16 @@ import java.util.Arrays; @Override public void startSeek(long targetGranule) { + Assertions.checkNotNull(streamMetadata.seekTable); + long[] seekPointGranules = streamMetadata.seekTable.pointSampleNumbers; int index = Util.binarySearchFloor(seekPointGranules, targetGranule, true, true); pendingSeekGranule = seekPointGranules[index]; } @Override public SeekMap createSeekMap() { - return this; - } - - @Override - public boolean isSeekable() { - return true; - } - - @Override - public SeekPoints getSeekPoints(long timeUs) { - long granule = convertTimeToGranule(timeUs); - int index = Util.binarySearchFloor(seekPointGranules, granule, true, true); - long seekTimeUs = convertGranuleToTime(seekPointGranules[index]); - long seekPosition = firstFrameOffset + seekPointOffsets[index]; - SeekPoint seekPoint = new SeekPoint(seekTimeUs, seekPosition); - if (seekTimeUs >= timeUs || index == seekPointGranules.length - 1) { - return new SeekPoints(seekPoint); - } else { - long secondSeekTimeUs = convertGranuleToTime(seekPointGranules[index + 1]); - long secondSeekPosition = firstFrameOffset + seekPointOffsets[index + 1]; - SeekPoint secondSeekPoint = new SeekPoint(secondSeekTimeUs, secondSeekPosition); - return new SeekPoints(seekPoint, secondSeekPoint); - } - } - - @Override - public long getDurationUs() { - return streamMetadata.getDurationUs(); + Assertions.checkState(firstFrameOffset != -1); + return new FlacSeekTableSeekMap(streamMetadata, firstFrameOffset); } } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/util/FlacConstants.java b/library/core/src/main/java/com/google/android/exoplayer2/util/FlacConstants.java index 75b153d6f9..0d36d78ff9 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/util/FlacConstants.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/util/FlacConstants.java @@ -29,5 +29,14 @@ public final class FlacConstants { /** Maximum size of a FLAC frame header in bytes. */ public static final int MAX_FRAME_HEADER_SIZE = 16; + /** Stream info metadata block type. */ + public static final int METADATA_TYPE_STREAM_INFO = 0; + /** Seek table metadata block type. */ + public static final int METADATA_TYPE_SEEK_TABLE = 3; + /** Vorbis comment metadata block type. */ + public static final int METADATA_TYPE_VORBIS_COMMENT = 4; + /** Picture metadata block type. */ + public static final int METADATA_TYPE_PICTURE = 6; + private FlacConstants() {} } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/util/FlacStreamMetadata.java b/library/core/src/main/java/com/google/android/exoplayer2/util/FlacStreamMetadata.java index a0b26f8e56..deced8ebe6 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/util/FlacStreamMetadata.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/util/FlacStreamMetadata.java @@ -30,6 +30,8 @@ import java.util.List; * * @see FLAC format * METADATA_BLOCK_STREAMINFO + * @see FLAC format + * METADATA_BLOCK_SEEKTABLE * @see FLAC format * METADATA_BLOCK_VORBIS_COMMENT * @see FLAC format @@ -37,6 +39,19 @@ import java.util.List; */ public final class FlacStreamMetadata { + /** A FLAC seek table. */ + public static class SeekTable { + /** Seek points sample numbers. */ + public final long[] pointSampleNumbers; + /** Seek points byte offsets from the first frame. */ + public final long[] pointOffsets; + + public SeekTable(long[] pointSampleNumbers, long[] pointOffsets) { + this.pointSampleNumbers = pointSampleNumbers; + this.pointOffsets = pointOffsets; + } + } + private static final String TAG = "FlacStreamMetadata"; /** Indicates that a value is not in the corresponding lookup table. */ @@ -79,7 +94,8 @@ public final class FlacStreamMetadata { public final int bitsPerSampleLookupKey; /** Total number of samples, or 0 if the value is unknown. */ public final long totalSamples; - + /** Seek table, or {@code null} if it is not provided. */ + @Nullable public final SeekTable seekTable; /** Content metadata, or {@code null} if it is not provided. */ @Nullable private final Metadata metadata; @@ -102,6 +118,7 @@ public final class FlacStreamMetadata { bitsPerSample = scratch.readBits(5) + 1; bitsPerSampleLookupKey = getBitsPerSampleLookupKey(bitsPerSample); totalSamples = scratch.readBitsToLong(36); + seekTable = null; metadata = null; } @@ -126,6 +143,7 @@ public final class FlacStreamMetadata { channels, bitsPerSample, totalSamples, + /* seekTable= */ null, buildMetadata(vorbisComments, pictureFrames)); } @@ -138,6 +156,7 @@ public final class FlacStreamMetadata { int channels, int bitsPerSample, long totalSamples, + @Nullable SeekTable seekTable, @Nullable Metadata metadata) { this.minBlockSizeSamples = minBlockSizeSamples; this.maxBlockSizeSamples = maxBlockSizeSamples; @@ -149,6 +168,7 @@ public final class FlacStreamMetadata { this.bitsPerSample = bitsPerSample; this.bitsPerSampleLookupKey = getBitsPerSampleLookupKey(bitsPerSample); this.totalSamples = totalSamples; + this.seekTable = seekTable; this.metadata = metadata; } @@ -239,6 +259,21 @@ public final class FlacStreamMetadata { return metadata == null ? other : metadata.copyWithAppendedEntriesFrom(other); } + /** Returns a copy of {@code this} with the seek table replaced by the one given. */ + public FlacStreamMetadata copyWithSeekTable(@Nullable SeekTable seekTable) { + return new FlacStreamMetadata( + minBlockSizeSamples, + maxBlockSizeSamples, + minFrameSize, + maxFrameSize, + sampleRate, + channels, + bitsPerSample, + totalSamples, + seekTable, + metadata); + } + /** Returns a copy of {@code this} with the given Vorbis comments added to the metadata. */ public FlacStreamMetadata copyWithVorbisComments(List vorbisComments) { @Nullable @@ -254,6 +289,7 @@ public final class FlacStreamMetadata { channels, bitsPerSample, totalSamples, + seekTable, appendedMetadata); } @@ -272,6 +308,7 @@ public final class FlacStreamMetadata { channels, bitsPerSample, totalSamples, + seekTable, appendedMetadata); } diff --git a/library/core/src/test/assets/flac/bear.flac.3.dump b/library/core/src/test/assets/flac/bear.flac.3.dump index cf1f7e9946..7553b6bdcb 100644 --- a/library/core/src/test/assets/flac/bear.flac.3.dump +++ b/library/core/src/test/assets/flac/bear.flac.3.dump @@ -27,9 +27,13 @@ track 0: metadata = null initializationData: data = length 42, hash 83F6895 - total output bytes = 445 - sample count = 1 + total output bytes = 3829 + sample count = 2 sample 0: + time = 2645333 + flags = 1 + data = length 3384, hash 938BCDD9 + sample 1: time = 2730666 flags = 1 data = length 445, hash A388E3D6 diff --git a/library/core/src/test/assets/flac/bear_no_min_max_frame_size.flac.3.dump b/library/core/src/test/assets/flac/bear_no_min_max_frame_size.flac.3.dump index 1704e4df0c..b27b4b7295 100644 --- a/library/core/src/test/assets/flac/bear_no_min_max_frame_size.flac.3.dump +++ b/library/core/src/test/assets/flac/bear_no_min_max_frame_size.flac.3.dump @@ -27,9 +27,13 @@ track 0: metadata = null initializationData: data = length 42, hash 9218FDB7 - total output bytes = 445 - sample count = 1 + total output bytes = 3829 + sample count = 2 sample 0: + time = 2645333 + flags = 1 + data = length 3384, hash 938BCDD9 + sample 1: time = 2730666 flags = 1 data = length 445, hash A388E3D6 diff --git a/library/core/src/test/assets/flac/bear_no_min_max_frame_size.flac.unklen.dump b/library/core/src/test/assets/flac/bear_no_min_max_frame_size.flac.unklen.dump deleted file mode 100644 index 4ef7138487..0000000000 --- a/library/core/src/test/assets/flac/bear_no_min_max_frame_size.flac.unklen.dump +++ /dev/null @@ -1,164 +0,0 @@ -seekMap: - isSeekable = false - duration = 2741000 - getPosition(0) = [[timeUs=0, position=0]] -numberOfTracks = 1 -track 0: - format: - bitrate = 1536000 - id = null - containerMimeType = null - sampleMimeType = audio/flac - maxInputSize = -1 - width = -1 - height = -1 - frameRate = -1.0 - rotationDegrees = 0 - pixelWidthHeightRatio = 1.0 - channelCount = 2 - sampleRate = 48000 - pcmEncoding = -1 - encoderDelay = 0 - encoderPadding = 0 - subsampleOffsetUs = 9223372036854775807 - selectionFlags = 0 - language = null - drmInitData = - - metadata = null - initializationData: - data = length 42, hash 9218FDB7 - total output bytes = 164431 - sample count = 33 - sample 0: - time = 0 - flags = 1 - data = length 5030, hash D2B60530 - sample 1: - time = 85333 - flags = 1 - data = length 5066, hash 4C932A54 - sample 2: - time = 170666 - flags = 1 - data = length 5112, hash 7E5A7B61 - sample 3: - time = 256000 - flags = 1 - data = length 5044, hash 7EF93F13 - sample 4: - time = 341333 - flags = 1 - data = length 4943, hash DE7E27F8 - sample 5: - time = 426666 - flags = 1 - data = length 5121, hash 6D0D0B40 - sample 6: - time = 512000 - flags = 1 - data = length 5068, hash 9924644F - sample 7: - time = 597333 - flags = 1 - data = length 5143, hash 6C34F0CE - sample 8: - time = 682666 - flags = 1 - data = length 5109, hash E3B7BEFB - sample 9: - time = 768000 - flags = 1 - data = length 5129, hash 44111D9B - sample 10: - time = 853333 - flags = 1 - data = length 5031, hash 9D55EA53 - sample 11: - time = 938666 - flags = 1 - data = length 5119, hash E1CB9BA6 - sample 12: - time = 1024000 - flags = 1 - data = length 5360, hash 17265C5D - sample 13: - time = 1109333 - flags = 1 - data = length 5340, hash A90FDDF1 - sample 14: - time = 1194666 - flags = 1 - data = length 5162, hash 31F65AD5 - sample 15: - time = 1280000 - flags = 1 - data = length 5168, hash F2394F2D - sample 16: - time = 1365333 - flags = 1 - data = length 5776, hash 58437AB3 - sample 17: - time = 1450666 - flags = 1 - data = length 5394, hash EBAB20A8 - sample 18: - time = 1536000 - flags = 1 - data = length 5168, hash BF37C7A5 - sample 19: - time = 1621333 - flags = 1 - data = length 5324, hash 59546B7B - sample 20: - time = 1706666 - flags = 1 - data = length 5172, hash 6036EF0B - sample 21: - time = 1792000 - flags = 1 - data = length 5102, hash 5A131071 - sample 22: - time = 1877333 - flags = 1 - data = length 5111, hash 3D9EBB3B - sample 23: - time = 1962666 - flags = 1 - data = length 5113, hash 61101D4F - sample 24: - time = 2048000 - flags = 1 - data = length 5229, hash D2E55742 - sample 25: - time = 2133333 - flags = 1 - data = length 5162, hash 7F2E97FA - sample 26: - time = 2218666 - flags = 1 - data = length 5255, hash D92A782 - sample 27: - time = 2304000 - flags = 1 - data = length 5196, hash 98FE5138 - sample 28: - time = 2389333 - flags = 1 - data = length 5214, hash 3D35C38C - sample 29: - time = 2474666 - flags = 1 - data = length 5211, hash 7E25420F - sample 30: - time = 2560000 - flags = 1 - data = length 5230, hash 2AD96FBC - sample 31: - time = 2645333 - flags = 1 - data = length 3384, hash 938BCDD9 - sample 32: - time = 2730666 - flags = 1 - data = length 445, hash A388E3D6 -tracksEnded = true diff --git a/library/core/src/test/assets/flac/bear_no_num_samples.flac.0.dump b/library/core/src/test/assets/flac/bear_no_num_samples.flac.0.dump index 45b75392b3..0a1736f3e2 100644 --- a/library/core/src/test/assets/flac/bear_no_num_samples.flac.0.dump +++ b/library/core/src/test/assets/flac/bear_no_num_samples.flac.0.dump @@ -1,7 +1,7 @@ seekMap: - isSeekable = false + isSeekable = true duration = UNSET TIME - getPosition(0) = [[timeUs=0, position=0]] + getPosition(0) = [[timeUs=0, position=8880]] numberOfTracks = 1 track 0: format: diff --git a/library/core/src/test/assets/flac/bear_no_seek_table_no_num_samples.flac b/library/core/src/test/assets/flac/bear_no_seek_table_no_num_samples.flac new file mode 100644 index 0000000000000000000000000000000000000000..0f1dff1e847cc1bf466c514e8dafdfd954e38ad8 GIT binary patch literal 172713 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%0AHQO*8-Sj| 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

(xERX&c3&`-1 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

Z+5me5xNq=NPSbeZ+0!@V~0BbE0 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

12ouG3<>6h)iDgGoHk0aaHFqK2aWUYy`_6tW| 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 literal 0 HcmV?d00001 diff --git a/library/core/src/test/assets/flac/bear.flac.unklen.dump b/library/core/src/test/assets/flac/bear_no_seek_table_no_num_samples.flac.0.dump similarity index 98% rename from library/core/src/test/assets/flac/bear.flac.unklen.dump rename to library/core/src/test/assets/flac/bear_no_seek_table_no_num_samples.flac.0.dump index bd8f1827e4..45b75392b3 100644 --- a/library/core/src/test/assets/flac/bear.flac.unklen.dump +++ b/library/core/src/test/assets/flac/bear_no_seek_table_no_num_samples.flac.0.dump @@ -1,6 +1,6 @@ seekMap: isSeekable = false - duration = 2741000 + duration = UNSET TIME getPosition(0) = [[timeUs=0, position=0]] numberOfTracks = 1 track 0: @@ -26,7 +26,7 @@ track 0: drmInitData = - metadata = null initializationData: - data = length 42, hash 83F6895 + data = length 42, hash 49FA2C21 total output bytes = 164431 sample count = 33 sample 0: diff --git a/library/core/src/test/assets/flac/bear_uncommon_sample_rate.flac b/library/core/src/test/assets/flac/bear_uncommon_sample_rate.flac index 2fc58661eb74152d315f96bbda69d426d9908584..e2e0b6a83da6755db58072601851fd22adbe41d7 100644 GIT binary patch delta 614 zcmdnCjPuV@&Iwxe%nVEp3}`?I%7@XS>M)iHR7UFnOvDT-;-CQ&@qmhiT!M*2K}E9W z!bEbQBK7rWU_y0Jp{cWBA`_q@tKDECi=ZM0a$q7`pd#1UVIs$%B5%IJL~cMt7?~wt zBCnt#l5F)bp+8U|BRi-FBOg@6<2y`50V)!o2NN-Zij*e7L|mXE-Hb4iFsR6aKA1=b zRAk#Dp?WB@3QC`u22<1n6?t?QCNd8y^5Y{+WCKKmiSGtX new FlacExtractor(FlacExtractor.FLAG_DISABLE_ID3_METADATA), "flac/bear_with_id3_disabled.flac"); } + @Test + public void testSampleUnseekable() throws Exception { + ExtractorAsserts.assertBehavior( + FlacExtractor::new, "flac/bear_no_seek_table_no_num_samples.flac"); + } + @Test public void testSampleWithVorbisComments() throws Exception { - assertBehavior(FlacExtractor::new, "flac/bear_with_vorbis_comments.flac"); + ExtractorAsserts.assertBehavior(FlacExtractor::new, "flac/bear_with_vorbis_comments.flac"); } @Test public void testSampleWithPicture() throws Exception { - assertBehavior(FlacExtractor::new, "flac/bear_with_picture.flac"); + ExtractorAsserts.assertBehavior(FlacExtractor::new, "flac/bear_with_picture.flac"); } @Test public void testOneMetadataBlock() throws Exception { - assertBehavior(FlacExtractor::new, "flac/bear_one_metadata_block.flac"); + // Don't simulate IO errors as it is too slow when using the binary search seek map (see + // [Internal: b/145994869]). + assertBehaviorWithoutSimulatingIOErrors("flac/bear_one_metadata_block.flac"); } @Test public void testNoMinMaxFrameSize() throws Exception { - assertBehavior(FlacExtractor::new, "flac/bear_no_min_max_frame_size.flac"); + ExtractorAsserts.assertBehavior(FlacExtractor::new, "flac/bear_no_min_max_frame_size.flac"); } @Test @@ -76,24 +83,63 @@ public class FlacExtractorTest { @Test public void testUncommonSampleRate() throws Exception { - assertBehavior(FlacExtractor::new, "flac/bear_uncommon_sample_rate.flac"); + ExtractorAsserts.assertBehavior(FlacExtractor::new, "flac/bear_uncommon_sample_rate.flac"); } - private void assertBehavior(ExtractorFactory factory, String file) + private static void assertBehaviorWithoutSimulatingIOErrors(String file) throws IOException, InterruptedException { // Check behavior prior to initialization. - Extractor extractor = factory.create(); + Extractor extractor = new FlacExtractor(); extractor.seek(0, 0); extractor.release(); + // Assert output. Context context = ApplicationProvider.getApplicationContext(); byte[] data = TestUtil.getByteArray(context, file); - // Don't simulate IO errors as it is too slow (see b/145994869). - ExtractorAsserts.assertOutput(factory.create(), file, data, context, true, false, false, false); - ExtractorAsserts.assertOutput(factory.create(), file, data, context, true, false, false, true); - ExtractorAsserts.assertOutput(factory.create(), file, data, context, true, false, true, false); - ExtractorAsserts.assertOutput(factory.create(), file, data, context, true, false, true, true); ExtractorAsserts.assertOutput( - factory.create(), file, data, context, false, false, false, false); + new FlacExtractor(), + file, + data, + context, + /* sniffFirst= */ true, + /* simulateIOErrors= */ false, + /* simulateUnknownLength= */ false, + /* simulatePartialReads= */ false); + ExtractorAsserts.assertOutput( + new FlacExtractor(), + file, + data, + context, + /* sniffFirst= */ true, + /* simulateIOErrors= */ false, + /* simulateUnknownLength= */ false, + /* simulatePartialReads= */ true); + ExtractorAsserts.assertOutput( + new FlacExtractor(), + file, + data, + context, + /* sniffFirst= */ true, + /* simulateIOErrors= */ false, + /* simulateUnknownLength= */ true, + /* simulatePartialReads= */ false); + ExtractorAsserts.assertOutput( + new FlacExtractor(), + file, + data, + context, + /* sniffFirst= */ true, + /* simulateIOErrors= */ false, + /* simulateUnknownLength= */ true, + /* simulatePartialReads= */ true); + ExtractorAsserts.assertOutput( + new FlacExtractor(), + file, + data, + context, + /* sniffFirst= */ false, + /* simulateIOErrors= */ false, + /* simulateUnknownLength= */ false, + /* simulatePartialReads= */ false); } } diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/ExtractorAsserts.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/ExtractorAsserts.java index a721e81db9..050898a20e 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/ExtractorAsserts.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/ExtractorAsserts.java @@ -208,18 +208,21 @@ public final class ExtractorAsserts { extractorOutput.assertOutput(context, file + ".0" + DUMP_EXTENSION); } - // If the SeekMap is seekable, test seeking to 4 positions in the stream. + // If the SeekMap is seekable, test seeking in the stream. SeekMap seekMap = extractorOutput.seekMap; if (seekMap.isSeekable()) { long durationUs = seekMap.getDurationUs(); for (int j = 0; j < 4; j++) { extractorOutput.clearTrackOutputs(); - long timeUs = (durationUs * j) / 3; + long timeUs = durationUs == C.TIME_UNSET ? 0 : (durationUs * j) / 3; long position = seekMap.getSeekPoints(timeUs).first.position; input.reset(); input.setPosition((int) position); consumeTestData(extractor, input, timeUs, extractorOutput, false); extractorOutput.assertOutput(context, file + '.' + j + DUMP_EXTENSION); + if (durationUs == C.TIME_UNSET) { + break; + } } }