From 672906060ca64763f7209cddbf932e865db3bb19 Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Tue, 19 May 2015 14:05:08 +0100 Subject: [PATCH] Fix missing ID3 events When I moved the id3Reader instantiation out of the while loop (below where it is now) it was no longer guarded by the streamTypes.get(streamType) deduping check. This brings back an equivalent check. --- .../exoplayer/extractor/ts/TsExtractor.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ts/TsExtractor.java b/library/src/main/java/com/google/android/exoplayer/extractor/ts/TsExtractor.java index 6b83eff070..684ada760f 100644 --- a/library/src/main/java/com/google/android/exoplayer/extractor/ts/TsExtractor.java +++ b/library/src/main/java/com/google/android/exoplayer/extractor/ts/TsExtractor.java @@ -52,16 +52,17 @@ public final class TsExtractor implements Extractor, SeekMap { private static final long MAX_PTS = 0x1FFFFFFFFL; private final ParsableByteArray tsPacketBuffer; - private final SparseBooleanArray streamTypes; - private final SparseBooleanArray allowedPassthroughStreamTypes; - private final SparseArray tsPayloadReaders; // Indexed by pid - private final long firstSampleTimestampUs; private final ParsableBitArray tsScratch; + private final long firstSampleTimestampUs; + /* package */ final SparseBooleanArray streamTypes; + /* package */ final SparseBooleanArray allowedPassthroughStreamTypes; + /* package */ final SparseArray tsPayloadReaders; // Indexed by pid // Accessed only by the loading thread. private ExtractorOutput output; private long timestampOffsetUs; private long lastPts; + /* package */ Id3Reader id3Reader; public TsExtractor() { this(0, null); @@ -307,9 +308,11 @@ public final class TsExtractor implements Extractor, SeekMap { // Skip the descriptors. data.skipBytes(programInfoLength); - // Setup an ID3 track regardless of whether there's a corresponding entry, in case one - // appears intermittently during playback. See b/20261500. - Id3Reader id3Reader = new Id3Reader(output.track(TS_STREAM_TYPE_ID3)); + if (id3Reader == null) { + // Setup an ID3 track regardless of whether there's a corresponding entry, in case one + // appears intermittently during playback. See b/20261500. + id3Reader = new Id3Reader(output.track(TS_STREAM_TYPE_ID3)); + } int entriesSize = sectionLength - 9 /* Size of the rest of the fields before descriptors */ - programInfoLength - 4 /* CRC size */;