From f1bcc217a9742b1ed4908a42191e746c39d6735a Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 2 Jul 2023 23:47:47 -0500 Subject: [PATCH] Update to new HDR support option in moonlight-common-c --- app/src/main/java/com/limelight/Game.java | 5 ++--- .../com/limelight/nvstream/ConnectionContext.java | 1 + .../java/com/limelight/nvstream/NvConnection.java | 12 +++++++----- .../com/limelight/nvstream/StreamConfiguration.java | 10 ---------- .../java/com/limelight/nvstream/jni/MoonBridge.java | 2 +- app/src/main/jni/moonlight-core/callbacks.c | 4 ++-- app/src/main/jni/moonlight-core/moonlight-common-c | 2 +- 7 files changed, 14 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/limelight/Game.java b/app/src/main/java/com/limelight/Game.java index bc3c30de..fad3f66c 100644 --- a/app/src/main/java/com/limelight/Game.java +++ b/app/src/main/java/com/limelight/Game.java @@ -424,13 +424,13 @@ public class Game extends Activity implements SurfaceHolder.Callback, int supportedVideoFormats = MoonBridge.VIDEO_FORMAT_H264; if (decoderRenderer.isHevcSupported()) { supportedVideoFormats |= MoonBridge.VIDEO_FORMAT_H265; - if (decoderRenderer.isHevcMain10Hdr10Supported()) { + if (willStreamHdr && decoderRenderer.isHevcMain10Hdr10Supported()) { supportedVideoFormats |= MoonBridge.VIDEO_FORMAT_H265_MAIN10; } } if (decoderRenderer.isAv1Supported()) { supportedVideoFormats |= MoonBridge.VIDEO_FORMAT_AV1_MAIN8; - if (decoderRenderer.isAv1Main10Supported()) { + if (willStreamHdr && decoderRenderer.isAv1Main10Supported()) { supportedVideoFormats |= MoonBridge.VIDEO_FORMAT_AV1_MAIN10; } } @@ -486,7 +486,6 @@ public class Game extends Activity implements SurfaceHolder.Callback, .setHevcBitratePercentageMultiplier(75) .setAv1BitratePercentageMultiplier(60) .setSupportedVideoFormats(supportedVideoFormats) - .setEnableHdr(willStreamHdr) .setAttachedGamepadMask(gamepadMask) .setClientRefreshRateX100((int)(displayRefreshRate * 100)) .setAudioConfiguration(prefConfig.audioConfiguration) diff --git a/app/src/main/java/com/limelight/nvstream/ConnectionContext.java b/app/src/main/java/com/limelight/nvstream/ConnectionContext.java index 17d916ff..d6b92242 100644 --- a/app/src/main/java/com/limelight/nvstream/ConnectionContext.java +++ b/app/src/main/java/com/limelight/nvstream/ConnectionContext.java @@ -19,6 +19,7 @@ public class ConnectionContext { // This is the version quad from the appversion tag of /serverinfo public String serverAppVersion; public String serverGfeVersion; + public int serverCodecModeSupport; // This is the sessionUrl0 tag from /resume and /launch public String rtspSessionUrl; diff --git a/app/src/main/java/com/limelight/nvstream/NvConnection.java b/app/src/main/java/com/limelight/nvstream/NvConnection.java index e1589496..97792b35 100644 --- a/app/src/main/java/com/limelight/nvstream/NvConnection.java +++ b/app/src/main/java/com/limelight/nvstream/NvConnection.java @@ -242,9 +242,11 @@ public class NvConnection { return false; } - context.negotiatedHdr = context.streamConfig.getEnableHdr(); - if ((h.getServerCodecModeSupport(serverInfo) & 0x200) == 0 && context.negotiatedHdr) { - context.connListener.displayTransientMessage("Your GPU does not support streaming HDR. The stream will be SDR."); + context.serverCodecModeSupport = (int)h.getServerCodecModeSupport(serverInfo); + + context.negotiatedHdr = (context.streamConfig.getSupportedVideoFormats() & MoonBridge.VIDEO_FORMAT_MASK_10BIT) != 0; + if ((context.serverCodecModeSupport & 0x20200) == 0 && context.negotiatedHdr) { + context.connListener.displayTransientMessage("Your PC GPU does not support streaming HDR. The stream will be SDR."); context.negotiatedHdr = false; } @@ -254,7 +256,7 @@ public class NvConnection { // Check for a supported stream resolution if ((context.streamConfig.getWidth() > 4096 || context.streamConfig.getHeight() > 4096) && - (h.getServerCodecModeSupport(serverInfo) & 0x200) == 0) { + (h.getServerCodecModeSupport(serverInfo) & 0x200) == 0 && context.isNvidiaServerSoftware) { context.connListener.displayMessage("Your host PC does not support streaming at resolutions above 4K."); return false; } @@ -430,7 +432,7 @@ public class NvConnection { context.negotiatedPacketSize, context.negotiatedRemoteStreaming, context.streamConfig.getAudioConfiguration().toInt(), context.streamConfig.getSupportedVideoFormats(), - context.negotiatedHdr, + context.serverCodecModeSupport, context.streamConfig.getHevcBitratePercentageMultiplier(), context.streamConfig.getAv1BitratePercentageMultiplier(), context.streamConfig.getClientRefreshRateX100(), diff --git a/app/src/main/java/com/limelight/nvstream/StreamConfiguration.java b/app/src/main/java/com/limelight/nvstream/StreamConfiguration.java index 4809e881..fd462e29 100644 --- a/app/src/main/java/com/limelight/nvstream/StreamConfiguration.java +++ b/app/src/main/java/com/limelight/nvstream/StreamConfiguration.java @@ -25,7 +25,6 @@ public class StreamConfiguration { private int supportedVideoFormats; private int hevcBitratePercentageMultiplier; private int av1BitratePercentageMultiplier; - private boolean enableHdr; private int attachedGamepadMask; private int encryptionFlags; private int colorRange; @@ -96,11 +95,6 @@ public class StreamConfiguration { return this; } - public StreamConfiguration.Builder setEnableHdr(boolean enableHdr) { - config.enableHdr = enableHdr; - return this; - } - public StreamConfiguration.Builder setAttachedGamepadMask(int attachedGamepadMask) { config.attachedGamepadMask = attachedGamepadMask; return this; @@ -238,10 +232,6 @@ public class StreamConfiguration { return av1BitratePercentageMultiplier; } - public boolean getEnableHdr() { - return enableHdr; - } - public int getAttachedGamepadMask() { return attachedGamepadMask; } diff --git a/app/src/main/java/com/limelight/nvstream/jni/MoonBridge.java b/app/src/main/java/com/limelight/nvstream/jni/MoonBridge.java index c827ef94..cf31a49d 100644 --- a/app/src/main/java/com/limelight/nvstream/jni/MoonBridge.java +++ b/app/src/main/java/com/limelight/nvstream/jni/MoonBridge.java @@ -346,7 +346,7 @@ public class MoonBridge { int width, int height, int fps, int bitrate, int packetSize, int streamingRemotely, int audioConfiguration, int supportedVideoFormats, - boolean enableHdr, + int serverCodecModeSupport, int hevcBitratePercentageMultiplier, int av1BitratePercentageMultiplier, int clientRefreshRateX100, diff --git a/app/src/main/jni/moonlight-core/callbacks.c b/app/src/main/jni/moonlight-core/callbacks.c index 0587561b..b9b03ff7 100644 --- a/app/src/main/jni/moonlight-core/callbacks.c +++ b/app/src/main/jni/moonlight-core/callbacks.c @@ -433,7 +433,7 @@ Java_com_limelight_nvstream_jni_MoonBridge_startConnection(JNIEnv *env, jclass c jint width, jint height, jint fps, jint bitrate, jint packetSize, jint streamingRemotely, jint audioConfiguration, jint supportedVideoFormats, - jboolean enableHdr, + jint serverCodecModeSupport, jint hevcBitratePercentageMultiplier, jint av1BitratePercentageMultiplier, jint clientRefreshRateX100, @@ -456,7 +456,7 @@ Java_com_limelight_nvstream_jni_MoonBridge_startConnection(JNIEnv *env, jclass c .streamingRemotely = streamingRemotely, .audioConfiguration = audioConfiguration, .supportedVideoFormats = supportedVideoFormats, - .enableHdr = enableHdr, + .serverCodecModeSupport = serverCodecModeSupport, .hevcBitratePercentageMultiplier = hevcBitratePercentageMultiplier, .av1BitratePercentageMultiplier = av1BitratePercentageMultiplier, .clientRefreshRateX100 = clientRefreshRateX100, diff --git a/app/src/main/jni/moonlight-core/moonlight-common-c b/app/src/main/jni/moonlight-core/moonlight-common-c index e36bde4a..effba1a1 160000 --- a/app/src/main/jni/moonlight-core/moonlight-common-c +++ b/app/src/main/jni/moonlight-core/moonlight-common-c @@ -1 +1 @@ -Subproject commit e36bde4acce48c21c79a57fb29727d96fdae6503 +Subproject commit effba1a16fab4f72ac52e14b99bb90c08b96b582