diff --git a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java index 74e47f50..035c9e70 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java @@ -20,6 +20,7 @@ import com.limelight.nvstream.jni.MoonBridge; import com.limelight.preferences.PreferenceConfiguration; import android.annotation.TargetApi; +import android.app.Activity; import android.content.Context; import android.media.MediaCodec; import android.media.MediaCodecInfo; @@ -57,6 +58,7 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer implements C private ByteBuffer nextInputBuffer; private Context context; + private Activity activity; private MediaCodec videoDecoder; private Thread rendererThread; private boolean needsSpsBitstreamFixup, isExynos4; @@ -233,13 +235,14 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer implements C this.renderTarget = renderTarget; } - public MediaCodecDecoderRenderer(Context context, PreferenceConfiguration prefs, + public MediaCodecDecoderRenderer(Activity activity, PreferenceConfiguration prefs, CrashListener crashListener, int consecutiveCrashCount, boolean meteredData, boolean requestedHdr, String glRenderer, PerfOverlayListener perfListener) { //dumpDecoders(); - this.context = context; + this.context = activity; + this.activity = activity; this.prefs = prefs; this.crashListener = crashListener; this.consecutiveCrashCount = consecutiveCrashCount; @@ -871,6 +874,10 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer implements C return; } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + frameTimeNanos -= activity.getWindowManager().getDefaultDisplay().getAppVsyncOffsetNanos(); + } + // Don't render unless a new frame is due. This prevents microstutter when streaming // at a frame rate that doesn't match the display (such as 60 FPS on 120 Hz). long actualFrameTimeDeltaNs = frameTimeNanos - lastRenderedFrameTimeNanos;