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 com.limelight.preferences.PreferenceConfiguration;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.media.MediaCodec; import android.media.MediaCodec;
import android.media.MediaCodecInfo; import android.media.MediaCodecInfo;
@ -57,6 +58,7 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer implements C
private ByteBuffer nextInputBuffer; private ByteBuffer nextInputBuffer;
private Context context; private Context context;
private Activity activity;
private MediaCodec videoDecoder; private MediaCodec videoDecoder;
private Thread rendererThread; private Thread rendererThread;
private boolean needsSpsBitstreamFixup, isExynos4; private boolean needsSpsBitstreamFixup, isExynos4;
@ -233,13 +235,14 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer implements C
this.renderTarget = renderTarget; this.renderTarget = renderTarget;
} }
public MediaCodecDecoderRenderer(Context context, PreferenceConfiguration prefs, public MediaCodecDecoderRenderer(Activity activity, PreferenceConfiguration prefs,
CrashListener crashListener, int consecutiveCrashCount, CrashListener crashListener, int consecutiveCrashCount,
boolean meteredData, boolean requestedHdr, boolean meteredData, boolean requestedHdr,
String glRenderer, PerfOverlayListener perfListener) { String glRenderer, PerfOverlayListener perfListener) {
//dumpDecoders(); //dumpDecoders();
this.context = context; this.context = activity;
this.activity = activity;
this.prefs = prefs; this.prefs = prefs;
this.crashListener = crashListener; this.crashListener = crashListener;
this.consecutiveCrashCount = consecutiveCrashCount; this.consecutiveCrashCount = consecutiveCrashCount;
@ -871,6 +874,10 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer implements C
return; 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 // 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). // at a frame rate that doesn't match the display (such as 60 FPS on 120 Hz).
long actualFrameTimeDeltaNs = frameTimeNanos - lastRenderedFrameTimeNanos; long actualFrameTimeDeltaNs = frameTimeNanos - lastRenderedFrameTimeNanos;