android.media.MediaCrypto

Here are the examples of the java api class android.media.MediaCrypto taken from open source projects.

1. MediaCodecTrackRenderer#maybeInitCodec()

Project: ExoPlayer
File: MediaCodecTrackRenderer.java
@SuppressWarnings("deprecation")
protected final void maybeInitCodec() throws ExoPlaybackException {
    if (!shouldInitCodec()) {
        return;
    }
    String mimeType = format.mimeType;
    MediaCrypto mediaCrypto = null;
    boolean requiresSecureDecoder = false;
    if (drmInitData != null) {
        if (drmSessionManager == null) {
            throw new ExoPlaybackException("Media requires a DrmSessionManager");
        }
        if (!openedDrmSession) {
            drmSessionManager.open(drmInitData);
            openedDrmSession = true;
        }
        int drmSessionState = drmSessionManager.getState();
        if (drmSessionState == DrmSessionManager.STATE_ERROR) {
            throw new ExoPlaybackException(drmSessionManager.getError());
        } else if (drmSessionState == DrmSessionManager.STATE_OPENED || drmSessionState == DrmSessionManager.STATE_OPENED_WITH_KEYS) {
            mediaCrypto = drmSessionManager.getMediaCrypto();
            requiresSecureDecoder = drmSessionManager.requiresSecureDecoderComponent(mimeType);
        } else {
            // The drm session isn't open yet.
            return;
        }
    }
    DecoderInfo decoderInfo = null;
    try {
        decoderInfo = getDecoderInfo(mediaCodecSelector, mimeType, requiresSecureDecoder);
    } catch (DecoderQueryException e) {
        notifyAndThrowDecoderInitError(new DecoderInitializationException(format, e, requiresSecureDecoder, DecoderInitializationException.DECODER_QUERY_ERROR));
    }
    if (decoderInfo == null) {
        notifyAndThrowDecoderInitError(new DecoderInitializationException(format, null, requiresSecureDecoder, DecoderInitializationException.NO_SUITABLE_DECODER_ERROR));
    }
    String codecName = decoderInfo.name;
    codecIsAdaptive = decoderInfo.adaptive;
    codecNeedsDiscardToSpsWorkaround = codecNeedsDiscardToSpsWorkaround(codecName, format);
    codecNeedsFlushWorkaround = codecNeedsFlushWorkaround(codecName);
    codecNeedsEosPropagationWorkaround = codecNeedsEosPropagationWorkaround(codecName);
    codecNeedsEosFlushWorkaround = codecNeedsEosFlushWorkaround(codecName);
    codecNeedsMonoChannelCountWorkaround = codecNeedsMonoChannelCountWorkaround(codecName, format);
    try {
        long codecInitializingTimestamp = SystemClock.elapsedRealtime();
        TraceUtil.beginSection("createByCodecName(" + codecName + ")");
        codec = MediaCodec.createByCodecName(codecName);
        TraceUtil.endSection();
        TraceUtil.beginSection("configureCodec");
        configureCodec(codec, decoderInfo.adaptive, getFrameworkMediaFormat(format), mediaCrypto);
        TraceUtil.endSection();
        TraceUtil.beginSection("codec.start()");
        codec.start();
        TraceUtil.endSection();
        long codecInitializedTimestamp = SystemClock.elapsedRealtime();
        notifyDecoderInitialized(codecName, codecInitializedTimestamp, codecInitializedTimestamp - codecInitializingTimestamp);
        inputBuffers = codec.getInputBuffers();
        outputBuffers = codec.getOutputBuffers();
    } catch (Exception e) {
        notifyAndThrowDecoderInitError(new DecoderInitializationException(format, e, requiresSecureDecoder, codecName));
    }
    codecHotswapTimeMs = getState() == TrackRenderer.STATE_STARTED ? SystemClock.elapsedRealtime() : -1;
    inputIndex = -1;
    outputIndex = -1;
    waitingForFirstSyncFrame = true;
    codecCounters.codecInitCount++;
}