Compensate for choreographer vsync offset

This commit is contained in:
ns6089 2023-05-14 11:33:51 +03:00 committed by Cameron Gutman
parent 19b6e94824
commit c8df37e89e

View File

@ -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;