Eagerly set the format in PassthroughSectionPayloadReader.init

This reverts 94315ab757

This fixes issue:#7177

PiperOrigin-RevId: 305674114
This commit is contained in:
ibaker 2020-04-09 14:38:47 +01:00 committed by Ian Baker
parent e250900a57
commit d9a8622bd5
2 changed files with 13 additions and 3 deletions

View File

@ -36,7 +36,7 @@ public final class PassthroughSectionPayloadReader implements SectionPayloadRead
private final String mimeType;
private @MonotonicNonNull TimestampAdjuster timestampAdjuster;
private @MonotonicNonNull TrackOutput output;
private boolean formatDeclared;
private boolean formatOutputWithTimestampAdjustment;
/**
* Create a new PassthroughSectionPayloadReader.
@ -55,12 +55,15 @@ public final class PassthroughSectionPayloadReader implements SectionPayloadRead
this.timestampAdjuster = timestampAdjuster;
idGenerator.generateNewId();
output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_METADATA);
// Eagerly output an incomplete format (missing timestamp offset) to ensure source preparation
// is not blocked waiting for potentially sparse metadata.
output.format(new Format.Builder().setSampleMimeType(mimeType).build());
}
@Override
public void consume(ParsableByteArray sectionData) {
assertInitialized();
if (!formatDeclared) {
if (!formatOutputWithTimestampAdjustment) {
if (timestampAdjuster.getTimestampOffsetUs() == C.TIME_UNSET) {
// There is not enough information to initialize the timestamp adjuster.
return;
@ -70,7 +73,7 @@ public final class PassthroughSectionPayloadReader implements SectionPayloadRead
.setSampleMimeType(mimeType)
.setSubsampleOffsetUs(timestampAdjuster.getTimestampOffsetUs())
.build());
formatDeclared = true;
formatOutputWithTimestampAdjustment = true;
}
int sampleSize = sectionData.bytesLeft();
output.sampleData(sectionData, sampleSize);

View File

@ -36,6 +36,7 @@ import com.google.android.exoplayer2.testutil.FakeTrackOutput;
import com.google.android.exoplayer2.testutil.TestUtil;
import com.google.android.exoplayer2.util.ParsableByteArray;
import com.google.android.exoplayer2.util.TimestampAdjuster;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
@ -54,11 +55,17 @@ public final class TsExtractorTest {
}
@Test
@Ignore
// TODO(internal: b/153539929) Re-enable when ExtractorAsserts is less strict around repeated
// formats and seeking.
public void sampleWithScte35() throws Exception {
ExtractorAsserts.assertBehavior(TsExtractor::new, "ts/sample_scte35.ts");
}
@Test
@Ignore
// TODO(internal: b/153539929) Re-enable when ExtractorAsserts is less strict around repeated
// formats and seeking.
public void sampleWithAit() throws Exception {
ExtractorAsserts.assertBehavior(TsExtractor::new, "ts/sample_ait.ts");
}