Add a hack for massive video latency on Pixel 4 after display mode change

This commit is contained in:
Cameron Gutman 2019-10-29 21:38:06 -07:00
parent 1616c0b022
commit 1dba5d147e

View File

@ -397,25 +397,34 @@ public class Game extends Activity implements SurfaceHolder.Callback,
// Hopefully, we can get rid of this once someone comes up with a better way // Hopefully, we can get rid of this once someone comes up with a better way
// to track the state of the pipeline and time frames. // to track the state of the pipeline and time frames.
int roundedRefreshRate = Math.round(displayRefreshRate); int roundedRefreshRate = Math.round(displayRefreshRate);
if ((!prefConfig.disableFrameDrop || prefConfig.unlockFps) && prefConfig.fps >= roundedRefreshRate) { if (!prefConfig.disableFrameDrop || prefConfig.unlockFps) {
if (prefConfig.unlockFps) { if (Build.DEVICE.equals("coral") || Build.DEVICE.equals("flame")) {
// Use frame drops when rendering above the screen frame rate // HACK: Pixel 4 (XL) ignores the preferred display mode and lowers refresh rate,
decoderRenderer.enableLegacyFrameDropRendering(); // causing frame pacing issues. See https://issuetracker.google.com/issues/143401475
LimeLog.info("Using drop mode for FPS > Hz"); // To work around this, use frame drop mode if we want to stream at >= 60 FPS.
if (prefConfig.fps >= 60) {
LimeLog.info("Using Pixel 4 rendering hack");
decoderRenderer.enableLegacyFrameDropRendering();
}
} }
else if (roundedRefreshRate <= 49) { else if (prefConfig.fps >= roundedRefreshRate) {
// Let's avoid clearly bogus refresh rates and fall back to legacy rendering if (prefConfig.unlockFps) {
decoderRenderer.enableLegacyFrameDropRendering(); // Use frame drops when rendering above the screen frame rate
LimeLog.info("Bogus refresh rate: "+roundedRefreshRate); decoderRenderer.enableLegacyFrameDropRendering();
} LimeLog.info("Using drop mode for FPS > Hz");
// HACK: Avoid crashing on some MTK devices } else if (roundedRefreshRate <= 49) {
else if (decoderRenderer.isBlacklistedForFrameRate(roundedRefreshRate - 1)) { // Let's avoid clearly bogus refresh rates and fall back to legacy rendering
// Use the old rendering strategy on these broken devices decoderRenderer.enableLegacyFrameDropRendering();
decoderRenderer.enableLegacyFrameDropRendering(); LimeLog.info("Bogus refresh rate: " + roundedRefreshRate);
} }
else { // HACK: Avoid crashing on some MTK devices
prefConfig.fps = roundedRefreshRate - 1; else if (decoderRenderer.isBlacklistedForFrameRate(roundedRefreshRate - 1)) {
LimeLog.info("Adjusting FPS target for screen to "+prefConfig.fps); // Use the old rendering strategy on these broken devices
decoderRenderer.enableLegacyFrameDropRendering();
} else {
prefConfig.fps = roundedRefreshRate - 1;
LimeLog.info("Adjusting FPS target for screen to " + prefConfig.fps);
}
} }
} }