JNI code complete

This commit is contained in:
Cameron Gutman
2017-05-14 23:06:41 -07:00
parent ac8b7ae960
commit 73e4970a43
8 changed files with 338 additions and 13 deletions

View File

@@ -3,6 +3,7 @@ package com.limelight.nvstream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
@@ -223,8 +224,15 @@ public class NvConnection {
return;
}
ByteBuffer ib = ByteBuffer.allocate(16);
ib.putInt(context.riKeyId);
MoonBridge.startConnection(context.serverAddress.getHostAddress(),
context.serverAppVersion, context.serverGfeVersion);
context.serverAppVersion, context.serverGfeVersion,
context.streamConfig.getWidth(), context.streamConfig.getHeight(),
context.streamConfig.getRefreshRate(), context.streamConfig.getBitrate(),
context.streamConfig.getRemote(), context.streamConfig.getAudioConfiguration(),
context.streamConfig.getHevcSupported(), context.riKey.getEncoded(), ib.array());
}
public void start(AudioRenderer audioRenderer, VideoDecoderRenderer videoDecoderRenderer, NvConnectionListener connectionListener)

View File

@@ -1,13 +1,11 @@
package com.limelight.nvstream;
import com.limelight.nvstream.http.NvApp;
import com.limelight.nvstream.jni.MoonBridge;
public class StreamConfiguration {
public static final int INVALID_APP_ID = 0;
public static final int AUDIO_CONFIGURATION_STEREO = 1;
public static final int AUDIO_CONFIGURATION_5_1 = 2;
private static final int CHANNEL_COUNT_STEREO = 2;
private static final int CHANNEL_COUNT_5_1 = 6;
@@ -25,6 +23,7 @@ public class StreamConfiguration {
private boolean remote;
private int audioChannelMask;
private int audioChannelCount;
private int audioConfiguration;
private boolean supportsHevc;
public static class Builder {
@@ -77,11 +76,11 @@ public class StreamConfiguration {
}
public StreamConfiguration.Builder setAudioConfiguration(int audioConfig) {
if (audioConfig == AUDIO_CONFIGURATION_STEREO) {
if (audioConfig == MoonBridge.AUDIO_CONFIGURATION_STEREO) {
config.audioChannelCount = CHANNEL_COUNT_STEREO;
config.audioChannelMask = CHANNEL_MASK_STEREO;
}
else if (audioConfig == AUDIO_CONFIGURATION_5_1) {
else if (audioConfig == MoonBridge.AUDIO_CONFIGURATION_51_SURROUND) {
config.audioChannelCount = CHANNEL_COUNT_5_1;
config.audioChannelMask = CHANNEL_MASK_5_1;
}
@@ -89,6 +88,8 @@ public class StreamConfiguration {
throw new IllegalArgumentException("Invalid audio configuration");
}
config.audioConfiguration = audioConfig;
return this;
}
@@ -164,6 +165,10 @@ public class StreamConfiguration {
public int getAudioChannelMask() {
return audioChannelMask;
}
public int getAudioConfiguration() {
return audioConfiguration;
}
public boolean getHevcSupported() {
return supportsHevc;

View File

@@ -1,8 +1,6 @@
package com.limelight.nvstream.av.audio;
public interface AudioRenderer {
int getCapabilities();
void setup(int audioConfiguration);
void playDecodedAudio(byte[] audioData);

View File

@@ -1,10 +1,6 @@
package com.limelight.nvstream.av.video;
public abstract class VideoDecoderRenderer {
public int getCapabilities() {
return 0;
}
public abstract boolean setup(int format, int width, int height, int redrawRate);
public abstract int submitDecodeUnit(byte[] frameData);

View File

@@ -21,6 +21,11 @@ public class MoonBridge {
private static VideoDecoderRenderer videoRenderer;
private static NvConnectionListener connectionListener;
static {
System.load("moonlight-core");
init();
}
public static int CAPABILITY_SLICES_PER_FRAME(byte slices) {
return slices << 24;
}
@@ -118,7 +123,11 @@ public class MoonBridge {
MoonBridge.connectionListener = null;
}
public static native void startConnection(String address, String serverInfoAppVersion, String serverInfoGfeVersion);
public static native void startConnection(String address, String appVersion, String gfeVersion,
int width, int height, int fps,
int bitrate, boolean streamingRemotely,
int audioConfiguration, boolean supportsHevc,
byte[] riAesKey, byte[] riAesIv);
public static native void stopConnection();
@@ -142,4 +151,6 @@ public class MoonBridge {
public static native void sendMouseScroll(byte scrollClicks);
public static native String getStageName(int stage);
public static native void init();
}