Simplify checking whether a sample can be read
PiperOrigin-RevId: 281763672
This commit is contained in:
parent
cc520a670e
commit
d82da93ec4
@ -266,20 +266,8 @@ import java.io.IOException;
|
|||||||
if (formats[relativeReadIndex] != downstreamFormat) {
|
if (formats[relativeReadIndex] != downstreamFormat) {
|
||||||
// A format can be read.
|
// A format can be read.
|
||||||
return true;
|
return true;
|
||||||
} else if (Assertions.checkNotNull(downstreamFormat).drmInitData == null) {
|
|
||||||
// A sample from a clear section can be read.
|
|
||||||
return true;
|
|
||||||
} else if (drmSessionManager == DrmSessionManager.DUMMY
|
|
||||||
|| Assertions.checkNotNull(currentDrmSession).getState()
|
|
||||||
== DrmSession.STATE_OPENED_WITH_KEYS) {
|
|
||||||
// TODO: Remove DUMMY DrmSessionManager check once renderers are migrated [Internal ref:
|
|
||||||
// b/122519809].
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
// A clear sample in an encrypted section may be read if playClearSamplesWithoutKeys is true.
|
|
||||||
return (flags[relativeReadIndex] & C.BUFFER_FLAG_ENCRYPTED) == 0
|
|
||||||
&& Assertions.checkNotNull(currentDrmSession).playClearSamplesWithoutKeys();
|
|
||||||
}
|
}
|
||||||
|
return mayReadSample(relativeReadIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -328,20 +316,7 @@ import java.io.IOException;
|
|||||||
return C.RESULT_FORMAT_READ;
|
return C.RESULT_FORMAT_READ;
|
||||||
}
|
}
|
||||||
|
|
||||||
// It's likely that the media source creation has not yet been migrated and the renderer can
|
if (!mayReadSample(relativeReadIndex)) {
|
||||||
// acquire the session for the sample.
|
|
||||||
// TODO: Remove once renderers are migrated [Internal ref: b/122519809].
|
|
||||||
boolean skipDrmChecks = drmSessionManager == DrmSessionManager.DUMMY;
|
|
||||||
boolean isNextSampleEncrypted = (flags[relativeReadIndex] & C.BUFFER_FLAG_ENCRYPTED) != 0;
|
|
||||||
|
|
||||||
boolean mayReadSample =
|
|
||||||
skipDrmChecks
|
|
||||||
|| Util.castNonNull(downstreamFormat).drmInitData == null
|
|
||||||
|| (Assertions.checkNotNull(currentDrmSession).playClearSamplesWithoutKeys()
|
|
||||||
&& !isNextSampleEncrypted)
|
|
||||||
|| Assertions.checkNotNull(currentDrmSession).getState()
|
|
||||||
== DrmSession.STATE_OPENED_WITH_KEYS;
|
|
||||||
if (!mayReadSample) {
|
|
||||||
return C.RESULT_NOTHING_READ;
|
return C.RESULT_NOTHING_READ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -630,6 +605,25 @@ import java.io.IOException;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether it's possible to read the next sample.
|
||||||
|
*
|
||||||
|
* @param relativeReadIndex The relative read index of the next sample.
|
||||||
|
* @return Whether it's possible to read the next sample.
|
||||||
|
*/
|
||||||
|
private boolean mayReadSample(int relativeReadIndex) {
|
||||||
|
if (drmSessionManager == DrmSessionManager.DUMMY) {
|
||||||
|
// TODO: Remove once renderers are migrated [Internal ref: b/122519809].
|
||||||
|
// For protected content it's likely that the DrmSessionManager is still being injected into
|
||||||
|
// the renderers. We assume that the renderers will be able to acquire a DrmSession if needed.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return currentDrmSession == null
|
||||||
|
|| currentDrmSession.getState() == DrmSession.STATE_OPENED_WITH_KEYS
|
||||||
|
|| ((flags[relativeReadIndex] & C.BUFFER_FLAG_ENCRYPTED) == 0
|
||||||
|
&& currentDrmSession.playClearSamplesWithoutKeys());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finds the sample in the specified range that's before or at the specified time. If {@code
|
* Finds the sample in the specified range that's before or at the specified time. If {@code
|
||||||
* keyframe} is {@code true} then the sample is additionally required to be a keyframe.
|
* keyframe} is {@code true} then the sample is additionally required to be a keyframe.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user