MP3 extractor: refactor seeker initialization
PiperOrigin-RevId: 291405419
This commit is contained in:
parent
3fc61de7f7
commit
694f9844b0
@ -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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user