Commit aed8cad8 by tonihei Committed by Andrew Lewis

Remove unused waitingForKeys in renderers.

This flag isn't needed anymore because the waiting for keys happens on
the source side and the source just returns NOTHING_READ under the
same conditions.

PiperOrigin-RevId: 316704214
parent cc97bcb4
...@@ -123,7 +123,6 @@ public abstract class DecoderAudioRenderer extends BaseRenderer implements Media ...@@ -123,7 +123,6 @@ public abstract class DecoderAudioRenderer extends BaseRenderer implements Media
private boolean allowPositionDiscontinuity; private boolean allowPositionDiscontinuity;
private boolean inputStreamEnded; private boolean inputStreamEnded;
private boolean outputStreamEnded; private boolean outputStreamEnded;
private boolean waitingForKeys;
public DecoderAudioRenderer() { public DecoderAudioRenderer() {
this(/* eventHandler= */ null, /* eventListener= */ null); this(/* eventHandler= */ null, /* eventListener= */ null);
...@@ -399,52 +398,30 @@ public abstract class DecoderAudioRenderer extends BaseRenderer implements Media ...@@ -399,52 +398,30 @@ public abstract class DecoderAudioRenderer extends BaseRenderer implements Media
return false; return false;
} }
@SampleStream.ReadDataResult int result;
FormatHolder formatHolder = getFormatHolder(); FormatHolder formatHolder = getFormatHolder();
if (waitingForKeys) { switch (readSource(formatHolder, inputBuffer, /* formatRequired= */ false)) {
// We've already read an encrypted sample into buffer, and are waiting for keys. case C.RESULT_NOTHING_READ:
result = C.RESULT_BUFFER_READ; return false;
} else { case C.RESULT_FORMAT_READ:
result = readSource(formatHolder, inputBuffer, false); onInputFormatChanged(formatHolder);
} return true;
case C.RESULT_BUFFER_READ:
if (result == C.RESULT_NOTHING_READ) { if (inputBuffer.isEndOfStream()) {
return false; inputStreamEnded = true;
} decoder.queueInputBuffer(inputBuffer);
if (result == C.RESULT_FORMAT_READ) { inputBuffer = null;
onInputFormatChanged(formatHolder); return false;
return true; }
} inputBuffer.flip();
if (inputBuffer.isEndOfStream()) { onQueueInputBuffer(inputBuffer);
inputStreamEnded = true; decoder.queueInputBuffer(inputBuffer);
decoder.queueInputBuffer(inputBuffer); decoderReceivedBuffers = true;
inputBuffer = null; decoderCounters.inputBufferCount++;
return false; inputBuffer = null;
} return true;
boolean bufferEncrypted = inputBuffer.isEncrypted(); default:
waitingForKeys = shouldWaitForKeys(bufferEncrypted); throw new IllegalStateException();
if (waitingForKeys) {
return false;
}
inputBuffer.flip();
onQueueInputBuffer(inputBuffer);
decoder.queueInputBuffer(inputBuffer);
decoderReceivedBuffers = true;
decoderCounters.inputBufferCount++;
inputBuffer = null;
return true;
}
private boolean shouldWaitForKeys(boolean bufferEncrypted) throws ExoPlaybackException {
if (decoderDrmSession == null
|| (!bufferEncrypted && decoderDrmSession.playClearSamplesWithoutKeys())) {
return false;
}
@DrmSession.State int drmSessionState = decoderDrmSession.getState();
if (drmSessionState == DrmSession.STATE_ERROR) {
throw createRendererException(decoderDrmSession.getError(), inputFormat);
} }
return drmSessionState != DrmSession.STATE_OPENED_WITH_KEYS;
} }
private void processEndOfStream() throws ExoPlaybackException { private void processEndOfStream() throws ExoPlaybackException {
...@@ -458,7 +435,6 @@ public abstract class DecoderAudioRenderer extends BaseRenderer implements Media ...@@ -458,7 +435,6 @@ public abstract class DecoderAudioRenderer extends BaseRenderer implements Media
} }
private void flushDecoder() throws ExoPlaybackException { private void flushDecoder() throws ExoPlaybackException {
waitingForKeys = false;
if (decoderReinitializationState != REINITIALIZATION_STATE_NONE) { if (decoderReinitializationState != REINITIALIZATION_STATE_NONE) {
releaseDecoder(); releaseDecoder();
maybeInitDecoder(); maybeInitDecoder();
...@@ -481,7 +457,7 @@ public abstract class DecoderAudioRenderer extends BaseRenderer implements Media ...@@ -481,7 +457,7 @@ public abstract class DecoderAudioRenderer extends BaseRenderer implements Media
@Override @Override
public boolean isReady() { public boolean isReady() {
return audioSink.hasPendingData() return audioSink.hasPendingData()
|| (inputFormat != null && !waitingForKeys && (isSourceReady() || outputBuffer != null)); || (inputFormat != null && (isSourceReady() || outputBuffer != null));
} }
@Override @Override
...@@ -543,7 +519,6 @@ public abstract class DecoderAudioRenderer extends BaseRenderer implements Media ...@@ -543,7 +519,6 @@ public abstract class DecoderAudioRenderer extends BaseRenderer implements Media
protected void onDisabled() { protected void onDisabled() {
inputFormat = null; inputFormat = null;
audioTrackNeedsConfigure = true; audioTrackNeedsConfigure = true;
waitingForKeys = false;
try { try {
setSourceDrmSession(null); setSourceDrmSession(null);
releaseDecoder(); releaseDecoder();
......
...@@ -401,7 +401,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer { ...@@ -401,7 +401,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
private long lastBufferInStreamPresentationTimeUs; private long lastBufferInStreamPresentationTimeUs;
private boolean inputStreamEnded; private boolean inputStreamEnded;
private boolean outputStreamEnded; private boolean outputStreamEnded;
private boolean waitingForKeys;
private boolean waitingForFirstSyncSample; private boolean waitingForFirstSyncSample;
private boolean waitingForFirstSampleInFormat; private boolean waitingForFirstSampleInFormat;
private boolean pendingOutputEndOfStream; private boolean pendingOutputEndOfStream;
...@@ -880,7 +879,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer { ...@@ -880,7 +879,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
shouldSkipAdaptationWorkaroundOutputBuffer = false; shouldSkipAdaptationWorkaroundOutputBuffer = false;
isDecodeOnlyOutputBuffer = false; isDecodeOnlyOutputBuffer = false;
isLastOutputBuffer = false; isLastOutputBuffer = false;
waitingForKeys = false;
decodeOnlyPresentationTimestamps.clear(); decodeOnlyPresentationTimestamps.clear();
largestQueuedPresentationTimeUs = C.TIME_UNSET; largestQueuedPresentationTimeUs = C.TIME_UNSET;
lastBufferInStreamPresentationTimeUs = C.TIME_UNSET; lastBufferInStreamPresentationTimeUs = C.TIME_UNSET;
...@@ -1235,25 +1233,20 @@ public abstract class MediaCodecRenderer extends BaseRenderer { ...@@ -1235,25 +1233,20 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
return true; return true;
} }
@SampleStream.ReadDataResult int result; // For adaptive reconfiguration, decoders expect all reconfiguration data to be supplied at
FormatHolder formatHolder = getFormatHolder(); // the start of the buffer that also contains the first frame in the new format.
int adaptiveReconfigurationBytes = 0; if (codecReconfigurationState == RECONFIGURATION_STATE_WRITE_PENDING) {
if (waitingForKeys) { for (int i = 0; i < codecFormat.initializationData.size(); i++) {
// We've already read an encrypted sample into buffer, and are waiting for keys. byte[] data = codecFormat.initializationData.get(i);
result = C.RESULT_BUFFER_READ; buffer.data.put(data);
} else {
// For adaptive reconfiguration, decoders expect all reconfiguration data to be supplied at
// the start of the buffer that also contains the first frame in the new format.
if (codecReconfigurationState == RECONFIGURATION_STATE_WRITE_PENDING) {
for (int i = 0; i < codecFormat.initializationData.size(); i++) {
byte[] data = codecFormat.initializationData.get(i);
buffer.data.put(data);
}
codecReconfigurationState = RECONFIGURATION_STATE_QUEUE_PENDING;
} }
adaptiveReconfigurationBytes = buffer.data.position(); codecReconfigurationState = RECONFIGURATION_STATE_QUEUE_PENDING;
result = readSource(formatHolder, buffer, false);
} }
int adaptiveReconfigurationBytes = buffer.data.position();
FormatHolder formatHolder = getFormatHolder();
@SampleStream.ReadDataResult
int result = readSource(formatHolder, buffer, /* formatRequired= */ false);
if (hasReadStreamToEnd()) { if (hasReadStreamToEnd()) {
// Notify output queue of the last buffer's timestamp. // Notify output queue of the last buffer's timestamp.
...@@ -1321,14 +1314,9 @@ public abstract class MediaCodecRenderer extends BaseRenderer { ...@@ -1321,14 +1314,9 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
waitingForFirstSyncSample = false; waitingForFirstSyncSample = false;
boolean bufferEncrypted = buffer.isEncrypted(); boolean bufferEncrypted = buffer.isEncrypted();
waitingForKeys = shouldWaitForKeys(bufferEncrypted);
if (waitingForKeys) {
return false;
}
if (bufferEncrypted) { if (bufferEncrypted) {
buffer.cryptoInfo.increaseClearDataFirstSubSampleBy(adaptiveReconfigurationBytes); buffer.cryptoInfo.increaseClearDataFirstSubSampleBy(adaptiveReconfigurationBytes);
} }
if (codecNeedsDiscardToSpsWorkaround && !bufferEncrypted) { if (codecNeedsDiscardToSpsWorkaround && !bufferEncrypted) {
NalUnitUtil.discardToSps(buffer.data); NalUnitUtil.discardToSps(buffer.data);
if (buffer.data.position() == 0) { if (buffer.data.position() == 0) {
...@@ -1385,18 +1373,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer { ...@@ -1385,18 +1373,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
return true; return true;
} }
private boolean shouldWaitForKeys(boolean bufferEncrypted) throws ExoPlaybackException {
if (codecDrmSession == null
|| (!bufferEncrypted && codecDrmSession.playClearSamplesWithoutKeys())) {
return false;
}
@DrmSession.State int drmSessionState = codecDrmSession.getState();
if (drmSessionState == DrmSession.STATE_ERROR) {
throw createRendererException(codecDrmSession.getError(), inputFormat);
}
return drmSessionState != DrmSession.STATE_OPENED_WITH_KEYS;
}
/** /**
* Called when a {@link MediaCodec} has been created and configured. * Called when a {@link MediaCodec} has been created and configured.
* <p> * <p>
...@@ -1624,7 +1600,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer { ...@@ -1624,7 +1600,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
@Override @Override
public boolean isReady() { public boolean isReady() {
return inputFormat != null return inputFormat != null
&& !waitingForKeys
&& (isSourceReady() && (isSourceReady()
|| hasOutputBuffer() || hasOutputBuffer()
|| (codecHotswapDeadlineMs != C.TIME_UNSET || (codecHotswapDeadlineMs != C.TIME_UNSET
......
...@@ -116,7 +116,6 @@ public abstract class DecoderVideoRenderer extends BaseRenderer { ...@@ -116,7 +116,6 @@ public abstract class DecoderVideoRenderer extends BaseRenderer {
private boolean renderedFirstFrameAfterEnable; private boolean renderedFirstFrameAfterEnable;
private long initialPositionUs; private long initialPositionUs;
private long joiningDeadlineMs; private long joiningDeadlineMs;
private boolean waitingForKeys;
private boolean waitingForFirstSampleInFormat; private boolean waitingForFirstSampleInFormat;
private boolean inputStreamEnded; private boolean inputStreamEnded;
...@@ -211,9 +210,6 @@ public abstract class DecoderVideoRenderer extends BaseRenderer { ...@@ -211,9 +210,6 @@ public abstract class DecoderVideoRenderer extends BaseRenderer {
@Override @Override
public boolean isReady() { public boolean isReady() {
if (waitingForKeys) {
return false;
}
if (inputFormat != null if (inputFormat != null
&& (isSourceReady() || outputBuffer != null) && (isSourceReady() || outputBuffer != null)
&& (renderedFirstFrameAfterReset || !hasOutput())) { && (renderedFirstFrameAfterReset || !hasOutput())) {
...@@ -293,7 +289,6 @@ public abstract class DecoderVideoRenderer extends BaseRenderer { ...@@ -293,7 +289,6 @@ public abstract class DecoderVideoRenderer extends BaseRenderer {
@Override @Override
protected void onDisabled() { protected void onDisabled() {
inputFormat = null; inputFormat = null;
waitingForKeys = false;
clearReportedVideoSize(); clearReportedVideoSize();
clearRenderedFirstFrame(); clearRenderedFirstFrame();
try { try {
...@@ -336,7 +331,6 @@ public abstract class DecoderVideoRenderer extends BaseRenderer { ...@@ -336,7 +331,6 @@ public abstract class DecoderVideoRenderer extends BaseRenderer {
*/ */
@CallSuper @CallSuper
protected void flushDecoder() throws ExoPlaybackException { protected void flushDecoder() throws ExoPlaybackException {
waitingForKeys = false;
buffersInCodecCount = 0; buffersInCodecCount = 0;
if (decoderReinitializationState != REINITIALIZATION_STATE_NONE) { if (decoderReinitializationState != REINITIALIZATION_STATE_NONE) {
releaseDecoder(); releaseDecoder();
...@@ -726,46 +720,36 @@ public abstract class DecoderVideoRenderer extends BaseRenderer { ...@@ -726,46 +720,36 @@ public abstract class DecoderVideoRenderer extends BaseRenderer {
return false; return false;
} }
@SampleStream.ReadDataResult int result;
FormatHolder formatHolder = getFormatHolder(); FormatHolder formatHolder = getFormatHolder();
if (waitingForKeys) { switch (readSource(formatHolder, inputBuffer, /* formatRequired= */ false)) {
// We've already read an encrypted sample into buffer, and are waiting for keys. case C.RESULT_NOTHING_READ:
result = C.RESULT_BUFFER_READ; return false;
} else { case C.RESULT_FORMAT_READ:
result = readSource(formatHolder, inputBuffer, false); onInputFormatChanged(formatHolder);
} return true;
case C.RESULT_BUFFER_READ:
if (result == C.RESULT_NOTHING_READ) { if (inputBuffer.isEndOfStream()) {
return false; inputStreamEnded = true;
} decoder.queueInputBuffer(inputBuffer);
if (result == C.RESULT_FORMAT_READ) { inputBuffer = null;
onInputFormatChanged(formatHolder); return false;
return true; }
} if (waitingForFirstSampleInFormat) {
if (inputBuffer.isEndOfStream()) { formatQueue.add(inputBuffer.timeUs, inputFormat);
inputStreamEnded = true; waitingForFirstSampleInFormat = false;
decoder.queueInputBuffer(inputBuffer); }
inputBuffer = null; inputBuffer.flip();
return false; inputBuffer.format = inputFormat;
} onQueueInputBuffer(inputBuffer);
boolean bufferEncrypted = inputBuffer.isEncrypted(); decoder.queueInputBuffer(inputBuffer);
waitingForKeys = shouldWaitForKeys(bufferEncrypted); buffersInCodecCount++;
if (waitingForKeys) { decoderReceivedBuffers = true;
return false; decoderCounters.inputBufferCount++;
inputBuffer = null;
return true;
default:
throw new IllegalStateException();
} }
if (waitingForFirstSampleInFormat) {
formatQueue.add(inputBuffer.timeUs, inputFormat);
waitingForFirstSampleInFormat = false;
}
inputBuffer.flip();
inputBuffer.format = inputFormat;
onQueueInputBuffer(inputBuffer);
decoder.queueInputBuffer(inputBuffer);
buffersInCodecCount++;
decoderReceivedBuffers = true;
decoderCounters.inputBufferCount++;
inputBuffer = null;
return true;
} }
/** /**
...@@ -903,19 +887,6 @@ public abstract class DecoderVideoRenderer extends BaseRenderer { ...@@ -903,19 +887,6 @@ public abstract class DecoderVideoRenderer extends BaseRenderer {
maybeRenotifyRenderedFirstFrame(); maybeRenotifyRenderedFirstFrame();
} }
private boolean shouldWaitForKeys(boolean bufferEncrypted) throws ExoPlaybackException {
DrmSession decoderDrmSession = this.decoderDrmSession;
if (decoderDrmSession == null
|| (!bufferEncrypted && decoderDrmSession.playClearSamplesWithoutKeys())) {
return false;
}
@DrmSession.State int drmSessionState = decoderDrmSession.getState();
if (drmSessionState == DrmSession.STATE_ERROR) {
throw createRendererException(decoderDrmSession.getError(), inputFormat);
}
return drmSessionState != DrmSession.STATE_OPENED_WITH_KEYS;
}
private void setJoiningDeadlineMs() { private void setJoiningDeadlineMs() {
joiningDeadlineMs = joiningDeadlineMs =
allowedJoiningTimeMs > 0 allowedJoiningTimeMs > 0
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment