From 8571c81076f9c9a5cdccf42c4bff6ebd6108eb72 Mon Sep 17 00:00:00 2001 From: andrewlewis Date: Wed, 23 Mar 2016 12:42:29 -0700 Subject: [PATCH] Move resetting the peek position to ExtractorSampleSource. This fixes an issue where the PsExtractor would start reading unsynchronized if sniff was called. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=117958077 --- .../google/android/exoplayer/extractor/ExtractorInput.java | 4 ++-- .../android/exoplayer/extractor/ExtractorSampleSource.java | 3 ++- .../android/exoplayer/extractor/ogg/OggVorbisExtractor.java | 1 - .../android/exoplayer/extractor/webm/DefaultEbmlReader.java | 3 +-- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorInput.java b/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorInput.java index 6e03e932a6..afe79ec806 100644 --- a/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorInput.java +++ b/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorInput.java @@ -26,7 +26,7 @@ import java.io.IOException; public interface ExtractorInput { /** - * Reads up to {@code length} bytes from the input. + * Reads up to {@code length} bytes from the input and resets the peek position. *

* This method blocks until at least one byte of data can be read, the end of the input is * detected, or an exception is thrown. @@ -128,7 +128,7 @@ public interface ExtractorInput { * Otherwise an {@link EOFException} is thrown. *

* Calling {@link #resetPeekPosition()} resets the peek position to equal the current read - * position, so the caller can peek the same data again. Reading and skipping also reset the peek + * position, so the caller can peek the same data again. Reading or skipping also resets the peek * position. * * @param target A target array into which data should be written. diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorSampleSource.java b/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorSampleSource.java index 39789c0de7..f9b65a6fe6 100644 --- a/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorSampleSource.java +++ b/library/src/main/java/com/google/android/exoplayer/extractor/ExtractorSampleSource.java @@ -892,8 +892,9 @@ public final class ExtractorSampleSource implements SampleSource, ExtractorOutpu } } catch (EOFException e) { // Do nothing. + } finally { + input.resetPeekPosition(); } - input.resetPeekPosition(); } if (extractor == null) { throw new UnrecognizedInputFormatException(extractors); diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ogg/OggVorbisExtractor.java b/library/src/main/java/com/google/android/exoplayer/extractor/ogg/OggVorbisExtractor.java index 22b6b6db23..e72e76bc2b 100644 --- a/library/src/main/java/com/google/android/exoplayer/extractor/ogg/OggVorbisExtractor.java +++ b/library/src/main/java/com/google/android/exoplayer/extractor/ogg/OggVorbisExtractor.java @@ -72,7 +72,6 @@ public final class OggVorbisExtractor implements Extractor, SeekMap { } catch (ParserException e) { // does not happen } finally { - input.resetPeekPosition(); scratch.reset(); } return false; diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/webm/DefaultEbmlReader.java b/library/src/main/java/com/google/android/exoplayer/extractor/webm/DefaultEbmlReader.java index 1f036f8d27..fd1de76aaa 100644 --- a/library/src/main/java/com/google/android/exoplayer/extractor/webm/DefaultEbmlReader.java +++ b/library/src/main/java/com/google/android/exoplayer/extractor/webm/DefaultEbmlReader.java @@ -147,15 +147,14 @@ import java.util.Stack; */ private long maybeResyncToNextLevel1Element(ExtractorInput input) throws EOFException, IOException, InterruptedException { + input.resetPeekPosition(); while (true) { - input.resetPeekPosition(); input.peekFully(scratch, 0, MAX_ID_BYTES); int varintLength = VarintReader.parseUnsignedVarintLength(scratch[0]); if (varintLength != -1 && varintLength <= MAX_ID_BYTES) { int potentialId = (int) VarintReader.assembleVarint(scratch, varintLength, false); if (output.isLevel1Element(potentialId)) { input.skipFully(varintLength); - input.resetPeekPosition(); return potentialId; } }