diff --git a/moonlight-common/src/main/java/com/limelight/nvstream/StreamConfiguration.java b/moonlight-common/src/main/java/com/limelight/nvstream/StreamConfiguration.java index db835404..56cfd93e 100644 --- a/moonlight-common/src/main/java/com/limelight/nvstream/StreamConfiguration.java +++ b/moonlight-common/src/main/java/com/limelight/nvstream/StreamConfiguration.java @@ -27,7 +27,8 @@ public class StreamConfiguration { private boolean supportsHevc; private int hevcBitratePercentageMultiplier; private boolean enableHdr; - + private int attachedGamepadMask; + public static class Builder { private StreamConfiguration config = new StreamConfiguration(); @@ -86,6 +87,21 @@ public class StreamConfiguration { config.enableHdr = enableHdr; return this; } + + public StreamConfiguration.Builder setAttachedGamepadMask(int attachedGamepadMask) { + config.attachedGamepadMask = attachedGamepadMask; + return this; + } + + public StreamConfiguration.Builder setAttachedGamepadMaskByCount(int gamepadCount) { + config.attachedGamepadMask = 0; + for (int i = 0; i < 4; i++) { + if (gamepadCount > i) { + config.attachedGamepadMask |= 1 << i; + } + } + return this; + } public StreamConfiguration.Builder setAudioConfiguration(int audioConfig) { if (audioConfig == MoonBridge.AUDIO_CONFIGURATION_STEREO) { @@ -129,6 +145,7 @@ public class StreamConfiguration { this.audioChannelMask = CHANNEL_MASK_STEREO; this.supportsHevc = false; this.enableHdr = false; + this.attachedGamepadMask = 0; } public int getWidth() { @@ -194,4 +211,8 @@ public class StreamConfiguration { public boolean getEnableHdr() { return enableHdr; } + + public int getAttachedGamepadMask() { + return attachedGamepadMask; + } } diff --git a/moonlight-common/src/main/java/com/limelight/nvstream/http/NvHTTP.java b/moonlight-common/src/main/java/com/limelight/nvstream/http/NvHTTP.java index 952d8424..3a921f0f 100644 --- a/moonlight-common/src/main/java/com/limelight/nvstream/http/NvHTTP.java +++ b/moonlight-common/src/main/java/com/limelight/nvstream/http/NvHTTP.java @@ -638,7 +638,9 @@ public class NvHTTP { "&rikeyid="+context.riKeyId + (!enableHdr ? "" : "&hdrMode=1&clientHdrCapVersion=0&clientHdrCapSupportedFlagsInUint32=0&clientHdrCapMetaDataId=NV_STATIC_METADATA_TYPE_1&clientHdrCapDisplayData=0x0x0x0x0x0x0x0x0x0x0") + "&localAudioPlayMode=" + (context.streamConfig.getPlayLocalAudio() ? 1 : 0) + - "&surroundAudioInfo=" + ((context.streamConfig.getAudioChannelMask() << 16) + context.streamConfig.getAudioChannelCount()), + "&surroundAudioInfo=" + ((context.streamConfig.getAudioChannelMask() << 16) + context.streamConfig.getAudioChannelCount()) + + (context.streamConfig.getAttachedGamepadMask() != 0 ? "&remoteControllersBitmap=" + context.streamConfig.getAttachedGamepadMask() : "") + + (context.streamConfig.getAttachedGamepadMask() != 0 ? "&gcmap=" + context.streamConfig.getAttachedGamepadMask() : ""), false); String gameSession = getXmlString(xmlStr, "gamesession"); return gameSession != null && !gameSession.equals("0");