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) {
|
if (seeker == null) {
|
||||||
// Read past any seek frame and set the seeker based on metadata or a seek frame. Metadata
|
seeker = computeSeeker(input);
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
extractorOutput.seekMap(seeker);
|
extractorOutput.seekMap(seeker);
|
||||||
trackOutput.format(
|
trackOutput.format(
|
||||||
Format.createAudioSampleFormat(
|
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,
|
* 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.
|
* returning a {@link Seeker} if the metadata was present and valid, or {@code null} otherwise.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user