diff --git a/library/src/main/java/com/google/android/exoplayer/chunk/ChunkTrackStream.java b/library/src/main/java/com/google/android/exoplayer/chunk/ChunkTrackStream.java index 0c7c351ee6..462e00f0bd 100644 --- a/library/src/main/java/com/google/android/exoplayer/chunk/ChunkTrackStream.java +++ b/library/src/main/java/com/google/android/exoplayer/chunk/ChunkTrackStream.java @@ -218,12 +218,13 @@ public class ChunkTrackStream implements TrackStream, Loader.Callback { mediaChunks.removeFirst(); } BaseMediaChunk currentChunk = mediaChunks.getFirst(); - Format currentFormat = currentChunk.format; - if (downstreamFormat == null || !downstreamFormat.equals(currentFormat)) { - eventDispatcher.downstreamFormatChanged(currentFormat, currentChunk.trigger, + + Format format = currentChunk.format; + if (!format.equals(downstreamFormat)) { + eventDispatcher.downstreamFormatChanged(format, currentChunk.trigger, currentChunk.startTimeUs); - downstreamFormat = currentFormat; } + downstreamFormat = format; int result = sampleQueue.readData(formatHolder, buffer, loadingFinished, lastSeekPositionUs); if (result == FORMAT_READ) { diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/wav/WavHeaderReader.java b/library/src/main/java/com/google/android/exoplayer/extractor/wav/WavHeaderReader.java index cec2f2f6f6..c3c8599d4c 100644 --- a/library/src/main/java/com/google/android/exoplayer/extractor/wav/WavHeaderReader.java +++ b/library/src/main/java/com/google/android/exoplayer/extractor/wav/WavHeaderReader.java @@ -65,18 +65,14 @@ import java.io.IOException; return null; } - // If a bext chunk is present, skip it. Otherwise we expect a format chunk. + // Skip chunks until we find the format chunk. chunkHeader = ChunkHeader.peek(input, scratch); - if (chunkHeader.id == Util.getIntegerCodeForString("bext")) { + while (chunkHeader.id != Util.getIntegerCodeForString("fmt ")) { input.advancePeekPosition((int) chunkHeader.size); chunkHeader = ChunkHeader.peek(input, scratch); } - if (chunkHeader.id != Util.getIntegerCodeForString("fmt ")) { - throw new ParserException("Expected format chunk; found: " + chunkHeader.id); - } Assertions.checkState(chunkHeader.size >= 16); - input.peekFully(scratch.data, 0, 16); scratch.setPosition(0); int type = scratch.readLittleEndianUnsignedShort(); @@ -88,11 +84,8 @@ import java.io.IOException; int expectedBlockAlignment = numChannels * bitsPerSample / 8; if (blockAlignment != expectedBlockAlignment) { - throw new ParserException( - "Expected WAV block alignment of: " - + expectedBlockAlignment - + "; got: " - + blockAlignment); + throw new ParserException("Expected block alignment: " + expectedBlockAlignment + "; got: " + + blockAlignment); } if (bitsPerSample != 16) { Log.e(TAG, "Only 16-bit WAVs are supported; got: " + bitsPerSample); diff --git a/library/src/main/java/com/google/android/exoplayer/hls/HlsSampleSource.java b/library/src/main/java/com/google/android/exoplayer/hls/HlsSampleSource.java index 75c978a3d7..d311a46c92 100644 --- a/library/src/main/java/com/google/android/exoplayer/hls/HlsSampleSource.java +++ b/library/src/main/java/com/google/android/exoplayer/hls/HlsSampleSource.java @@ -307,12 +307,12 @@ public final class HlsSampleSource implements SampleSource, Loader.Callback { mediaChunks.removeFirst(); } HlsMediaChunk currentChunk = mediaChunks.getFirst(); - Format currentFormat = currentChunk.format; - if (downstreamFormat == null || !downstreamFormat.equals(currentFormat)) { - eventDispatcher.downstreamFormatChanged(currentFormat, currentChunk.trigger, + Format format = currentChunk.format; + if (!format.equals(downstreamFormat)) { + eventDispatcher.downstreamFormatChanged(format, currentChunk.trigger, currentChunk.startTimeUs); - downstreamFormat = currentFormat; } + downstreamFormat = format; return sampleQueues[group].readData(formatHolder, buffer, loadingFinished, lastSeekPositionUs); }