Skip to content
This repository has been archived by the owner on Feb 11, 2022. It is now read-only.

ALL-3936/Intel hack #52

Merged
merged 5 commits into from
Jun 26, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,21 @@
import android.support.annotation.NonNull;

import com.google.android.exoplayer2.DefaultLoadControl;
import com.google.android.exoplayer2.DefaultRenderersFactory;
import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.RenderersFactory;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.drm.DrmSessionManager;
import com.google.android.exoplayer2.drm.FrameworkMediaCrypto;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.novoda.noplayer.drm.DrmSessionCreator;
import com.novoda.noplayer.exoplayer.forwarder.ExoPlayerDrmSessionEventListener;

import static com.novoda.noplayer.exoplayer.SimpleRenderersFactory.EXTENSION_RENDERER_MODE_OFF;

class ExoPlayerCreator {

private static final long DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS = 5000;

private final Context context;
private final DefaultTrackSelector trackSelector;

Expand All @@ -24,9 +28,16 @@ class ExoPlayerCreator {
}

@NonNull
public SimpleExoPlayer create(DrmSessionCreator drmSessionCreator, ExoPlayerDrmSessionEventListener exoPlayerDrmSessionEventListener) {
public SimpleExoPlayer create(DrmSessionCreator drmSessionCreator, ExoPlayerDrmSessionEventListener exoPlayerDrmSessionEventListener, boolean downgradeSecureDecoder) {
DrmSessionManager<FrameworkMediaCrypto> drmSessionManager = drmSessionCreator.create(exoPlayerDrmSessionEventListener);
DefaultRenderersFactory renderersFactory = new DefaultRenderersFactory(context, drmSessionManager);
RenderersFactory renderersFactory = new SimpleRenderersFactory(
context,
drmSessionManager,
EXTENSION_RENDERER_MODE_OFF,
DEFAULT_ALLOWED_VIDEO_JOINING_TIME_MS,
SecurityDowngradingCodecSelector.newInstance(downgradeSecureDecoder)
);

DefaultLoadControl loadControl = new DefaultLoadControl();
return ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector, loadControl);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,8 @@ void stop() {
exoPlayer.stop();
}

void loadVideo(DrmSessionCreator drmSessionCreator, Uri uri, ContentType contentType, ExoPlayerForwarder forwarder) {
exoPlayer = exoPlayerCreator.create(drmSessionCreator, forwarder.drmSessionEventListener());
void loadVideo(DrmSessionCreator drmSessionCreator, Uri uri, ContentType contentType, ExoPlayerForwarder forwarder, boolean downgradeSecureDecoder) {
exoPlayer = exoPlayerCreator.create(drmSessionCreator, forwarder.drmSessionEventListener(), downgradeSecureDecoder);
rendererTypeRequester = rendererTypeRequesterCreator.createfrom(exoPlayer);
exoPlayer.addListener(forwarder.exoPlayerEventListener());
exoPlayer.setVideoDebugListener(forwarder.videoRendererEventListener());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public class ExoPlayerTwoImpl implements Player {
private final ExoPlayerForwarder forwarder;
private final Heart heart;
private final DrmSessionCreator drmSessionCreator;
private final boolean downgradeSecureDecoder;
private final LoadTimeout loadTimeout;

private SurfaceHolderRequester surfaceHolderRequester;
Expand All @@ -45,13 +46,15 @@ public class ExoPlayerTwoImpl implements Player {
ExoPlayerForwarder exoPlayerForwarder,
LoadTimeout loadTimeoutParam,
Heart heart,
DrmSessionCreator drmSessionCreator) {
DrmSessionCreator drmSessionCreator,
boolean downgradeSecureDecoder) {
this.exoPlayer = exoPlayer;
this.listenersHolder = listenersHolder;
this.loadTimeout = loadTimeoutParam;
this.forwarder = exoPlayerForwarder;
this.heart = heart;
this.drmSessionCreator = drmSessionCreator;
this.downgradeSecureDecoder = downgradeSecureDecoder;
}

public void initialise() {
Expand Down Expand Up @@ -171,7 +174,7 @@ public void loadVideo(Uri uri, ContentType contentType) {
reset();
}
listenersHolder.getPreparedListeners().resetPreparedState();
exoPlayer.loadVideo(drmSessionCreator, uri, contentType, forwarder);
exoPlayer.loadVideo(drmSessionCreator, uri, contentType, forwarder, downgradeSecureDecoder);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

public class ExoPlayerTwoImplFactory {

public ExoPlayerTwoImpl create(Context context, DrmSessionCreator drmSessionCreator) {
public ExoPlayerTwoImpl create(Context context, DrmSessionCreator drmSessionCreator, boolean downgradeSecureDecoder) {
DefaultDataSourceFactory defaultDataSourceFactory = new DefaultDataSourceFactory(context, "user-agent");
Handler handler = new Handler(Looper.getMainLooper());
MediaSourceFactory mediaSourceFactory = new MediaSourceFactory(defaultDataSourceFactory, handler);
Expand Down Expand Up @@ -55,7 +55,8 @@ public ExoPlayerTwoImpl create(Context context, DrmSessionCreator drmSessionCrea
exoPlayerForwarder,
loadTimeout,
heart,
drmSessionCreator
drmSessionCreator,
downgradeSecureDecoder
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.novoda.noplayer.exoplayer;

import com.google.android.exoplayer2.mediacodec.MediaCodecInfo;
import com.google.android.exoplayer2.mediacodec.MediaCodecSelector;
import com.google.android.exoplayer2.mediacodec.MediaCodecUtil;

class SecurityDowngradingCodecSelector implements MediaCodecSelector {

private final InternalMediaCodecUtil internalMediaCodecUtil;
private final boolean downgradeSecureDecoder;

public static SecurityDowngradingCodecSelector newInstance(boolean downgradeSecureDecoder) {
InternalMediaCodecUtil internalMediaCodecUtil = new InternalMediaCodecUtil();
return new SecurityDowngradingCodecSelector(internalMediaCodecUtil, downgradeSecureDecoder);
}

SecurityDowngradingCodecSelector(InternalMediaCodecUtil internalMediaCodecUtil, boolean downgradeSecureDecoder) {
this.internalMediaCodecUtil = internalMediaCodecUtil;
this.downgradeSecureDecoder = downgradeSecureDecoder;
}

@Override
public MediaCodecInfo getDecoderInfo(String mimeType, boolean contentRequiresSecureDecoder)
throws MediaCodecUtil.DecoderQueryException {
return internalMediaCodecUtil.getDecoderInfo(mimeType, contentRequiresSecureDecoder && !downgradeSecureDecoder);
}

@Override
public MediaCodecInfo getPassthroughDecoderInfo() throws MediaCodecUtil.DecoderQueryException {
return internalMediaCodecUtil.getPassthroughDecoderInfo();
}

static class InternalMediaCodecUtil {

MediaCodecInfo getDecoderInfo(String mimeType, boolean requiresSecureDecoder) throws MediaCodecUtil.DecoderQueryException {
return MediaCodecUtil.getDecoderInfo(mimeType, requiresSecureDecoder);
}

MediaCodecInfo getPassthroughDecoderInfo() throws MediaCodecUtil.DecoderQueryException {
return MediaCodecUtil.getPassthroughDecoderInfo();
}
}
}
Loading