Reset requiresSecureDecoder boolean on codec release

PiperOrigin-RevId: 229253065
This commit is contained in:
olly 2019-01-14 22:17:50 +00:00 committed by Oliver Woodman
parent 1b62277a0b
commit 0bfbcea632

View File

@ -296,7 +296,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
@Nullable private DrmSession<FrameworkMediaCrypto> codecDrmSession; @Nullable private DrmSession<FrameworkMediaCrypto> codecDrmSession;
@Nullable private DrmSession<FrameworkMediaCrypto> sourceDrmSession; @Nullable private DrmSession<FrameworkMediaCrypto> sourceDrmSession;
@Nullable private MediaCrypto mediaCrypto; @Nullable private MediaCrypto mediaCrypto;
private boolean drmSessionRequiresSecureDecoder; private boolean mediaCryptoRequiresSecureDecoder;
private long renderTimeLimitMs; private long renderTimeLimitMs;
private float rendererOperatingRate; private float rendererOperatingRate;
@Nullable private MediaCodec codec; @Nullable private MediaCodec codec;
@ -481,7 +481,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
} catch (MediaCryptoException e) { } catch (MediaCryptoException e) {
throw ExoPlaybackException.createForRenderer(e, getIndex()); throw ExoPlaybackException.createForRenderer(e, getIndex());
} }
drmSessionRequiresSecureDecoder = mediaCryptoRequiresSecureDecoder =
!sessionMediaCrypto.forceAllowInsecureDecoderComponents !sessionMediaCrypto.forceAllowInsecureDecoderComponents
&& mediaCrypto.requiresSecureDecoderComponent(mimeType); && mediaCrypto.requiresSecureDecoderComponent(mimeType);
} }
@ -498,7 +498,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
} }
try { try {
maybeInitCodecWithFallback(mediaCrypto, drmSessionRequiresSecureDecoder); maybeInitCodecWithFallback(mediaCrypto, mediaCryptoRequiresSecureDecoder);
} catch (DecoderInitializationException e) { } catch (DecoderInitializationException e) {
throw ExoPlaybackException.createForRenderer(e, getIndex()); throw ExoPlaybackException.createForRenderer(e, getIndex());
} }
@ -606,6 +606,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
} }
} finally { } finally {
mediaCrypto = null; mediaCrypto = null;
mediaCryptoRequiresSecureDecoder = false;
setCodecDrmSession(null); setCodecDrmSession(null);
} }
} }
@ -727,18 +728,18 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
} }
private void maybeInitCodecWithFallback( private void maybeInitCodecWithFallback(
MediaCrypto crypto, boolean drmSessionRequiresSecureDecoder) MediaCrypto crypto, boolean mediaCryptoRequiresSecureDecoder)
throws DecoderInitializationException { throws DecoderInitializationException {
if (availableCodecInfos == null) { if (availableCodecInfos == null) {
try { try {
availableCodecInfos = availableCodecInfos =
new ArrayDeque<>(getAvailableCodecInfos(drmSessionRequiresSecureDecoder)); new ArrayDeque<>(getAvailableCodecInfos(mediaCryptoRequiresSecureDecoder));
preferredDecoderInitializationException = null; preferredDecoderInitializationException = null;
} catch (DecoderQueryException e) { } catch (DecoderQueryException e) {
throw new DecoderInitializationException( throw new DecoderInitializationException(
inputFormat, inputFormat,
e, e,
drmSessionRequiresSecureDecoder, mediaCryptoRequiresSecureDecoder,
DecoderInitializationException.DECODER_QUERY_ERROR); DecoderInitializationException.DECODER_QUERY_ERROR);
} }
} }
@ -747,7 +748,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
throw new DecoderInitializationException( throw new DecoderInitializationException(
inputFormat, inputFormat,
/* cause= */ null, /* cause= */ null,
drmSessionRequiresSecureDecoder, mediaCryptoRequiresSecureDecoder,
DecoderInitializationException.NO_SUITABLE_DECODER_ERROR); DecoderInitializationException.NO_SUITABLE_DECODER_ERROR);
} }
@ -766,7 +767,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
availableCodecInfos.removeFirst(); availableCodecInfos.removeFirst();
DecoderInitializationException exception = DecoderInitializationException exception =
new DecoderInitializationException( new DecoderInitializationException(
inputFormat, e, drmSessionRequiresSecureDecoder, codecInfo.name); inputFormat, e, mediaCryptoRequiresSecureDecoder, codecInfo.name);
if (preferredDecoderInitializationException == null) { if (preferredDecoderInitializationException == null) {
preferredDecoderInitializationException = exception; preferredDecoderInitializationException = exception;
} else { } else {
@ -782,11 +783,11 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
availableCodecInfos = null; availableCodecInfos = null;
} }
private List<MediaCodecInfo> getAvailableCodecInfos(boolean drmSessionRequiresSecureDecoder) private List<MediaCodecInfo> getAvailableCodecInfos(boolean mediaCryptoRequiresSecureDecoder)
throws DecoderQueryException { throws DecoderQueryException {
List<MediaCodecInfo> codecInfos = List<MediaCodecInfo> codecInfos =
getDecoderInfos(mediaCodecSelector, inputFormat, drmSessionRequiresSecureDecoder); getDecoderInfos(mediaCodecSelector, inputFormat, mediaCryptoRequiresSecureDecoder);
if (codecInfos.isEmpty() && drmSessionRequiresSecureDecoder) { if (codecInfos.isEmpty() && mediaCryptoRequiresSecureDecoder) {
// The drm session indicates that a secure decoder is required, but the device does not // The drm session indicates that a secure decoder is required, but the device does not
// have one. Assuming that supportsFormat indicated support for the media being played, we // have one. Assuming that supportsFormat indicated support for the media being played, we
// know that it does not require a secure output path. Most CDM implementations allow // know that it does not require a secure output path. Most CDM implementations allow