MP3 extractor: refactor seeker initialization

PiperOrigin-RevId: 291405419
This commit is contained in:
kimvde 2020-01-24 19:08:55 +00:00 committed by Andrew Lewis
parent 3fc61de7f7
commit 694f9844b0

View File

@ -190,24 +190,7 @@ public final class Mp3Extractor implements Extractor {
}
}
if (seeker == null) {
// Read past any seek frame and set the seeker based on metadata or a seek frame. Metadata
// takes priority as it can provide greater precision.
Seeker seekFrameSeeker = maybeReadSeekFrame(input);
Seeker metadataSeeker = maybeHandleSeekMetadata(metadata, input.getPosition());
if (disableSeeking) {
seeker = new UnseekableSeeker();
} else {
if (metadataSeeker != null) {
seeker = metadataSeeker;
} else if (seekFrameSeeker != null) {
seeker = seekFrameSeeker;
}
if (seeker == null
|| (!seeker.isSeekable() && (flags & FLAG_ENABLE_CONSTANT_BITRATE_SEEKING) != 0)) {
seeker = getConstantBitrateSeeker(input);
}
}
seeker = computeSeeker(input);
extractorOutput.seekMap(seeker);
trackOutput.format(
Format.createAudioSampleFormat(
@ -385,6 +368,31 @@ public final class Mp3Extractor implements Extractor {
}
}
private Seeker computeSeeker(ExtractorInput input) throws IOException, InterruptedException {
// Read past any seek frame and set the seeker based on metadata or a seek frame. Metadata
// takes priority as it can provide greater precision.
Seeker seekFrameSeeker = maybeReadSeekFrame(input);
Seeker metadataSeeker = maybeHandleSeekMetadata(metadata, input.getPosition());
if (disableSeeking) {
return new UnseekableSeeker();
}
@Nullable Seeker resultSeeker = null;
if (metadataSeeker != null) {
resultSeeker = metadataSeeker;
} else if (seekFrameSeeker != null) {
resultSeeker = seekFrameSeeker;
}
if (resultSeeker == null
|| (!resultSeeker.isSeekable() && (flags & FLAG_ENABLE_CONSTANT_BITRATE_SEEKING) != 0)) {
resultSeeker = getConstantBitrateSeeker(input);
}
return resultSeeker;
}
/**
* Consumes the next frame from the {@code input} if it contains VBRI or Xing seeking metadata,
* returning a {@link Seeker} if the metadata was present and valid, or {@code null} otherwise.