mirror of
https://github.com/androidx/media.git
synced 2025-05-10 09:12:16 +08:00
Extract method in MediaCodecRenderer
Deduplicates a bit of code PiperOrigin-RevId: 236621851
This commit is contained in:
parent
8fce3ce678
commit
7a1b8a9585
@ -635,23 +635,10 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
|
||||
renderToEndOfStream();
|
||||
return;
|
||||
}
|
||||
if (inputFormat == null) {
|
||||
// We don't have a format yet, so try and read one.
|
||||
flagsOnlyBuffer.clear();
|
||||
int result = readSource(formatHolder, flagsOnlyBuffer, true);
|
||||
if (result == C.RESULT_FORMAT_READ) {
|
||||
onInputFormatChanged(formatHolder.format);
|
||||
} else if (result == C.RESULT_BUFFER_READ) {
|
||||
// End of stream read having not read a format.
|
||||
Assertions.checkState(flagsOnlyBuffer.isEndOfStream());
|
||||
inputStreamEnded = true;
|
||||
processEndOfStream();
|
||||
return;
|
||||
} else {
|
||||
if (inputFormat == null && !readToFlagsOnlyBuffer(/* requireFormat= */ true)) {
|
||||
// We still don't have a format and can't make progress without one.
|
||||
return;
|
||||
}
|
||||
}
|
||||
// We have a format.
|
||||
maybeInitCodec();
|
||||
if (codec != null) {
|
||||
@ -666,15 +653,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
|
||||
// updated, and so that we have the most recent format should the codec be initialized. We may
|
||||
// also reach the end of the stream. Note that readSource will not read a sample into a
|
||||
// flags-only buffer.
|
||||
flagsOnlyBuffer.clear();
|
||||
int result = readSource(formatHolder, flagsOnlyBuffer, false);
|
||||
if (result == C.RESULT_FORMAT_READ) {
|
||||
onInputFormatChanged(formatHolder.format);
|
||||
} else if (result == C.RESULT_BUFFER_READ) {
|
||||
Assertions.checkState(flagsOnlyBuffer.isEndOfStream());
|
||||
inputStreamEnded = true;
|
||||
processEndOfStream();
|
||||
}
|
||||
readToFlagsOnlyBuffer(/* requireFormat= */ false);
|
||||
}
|
||||
decoderCounters.ensureUpdated();
|
||||
}
|
||||
@ -737,6 +716,21 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Reads into {@link #flagsOnlyBuffer} and returns whether a format was read. */
|
||||
private boolean readToFlagsOnlyBuffer(boolean requireFormat) throws ExoPlaybackException {
|
||||
flagsOnlyBuffer.clear();
|
||||
int result = readSource(formatHolder, flagsOnlyBuffer, requireFormat);
|
||||
if (result == C.RESULT_FORMAT_READ) {
|
||||
onInputFormatChanged(formatHolder.format);
|
||||
return true;
|
||||
} else if (result == C.RESULT_BUFFER_READ) {
|
||||
Assertions.checkState(flagsOnlyBuffer.isEndOfStream());
|
||||
inputStreamEnded = true;
|
||||
processEndOfStream();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void maybeInitCodecWithFallback(
|
||||
MediaCrypto crypto, boolean mediaCryptoRequiresSecureDecoder)
|
||||
throws DecoderInitializationException {
|
||||
|
Loading…
x
Reference in New Issue
Block a user