From 0074848a4e5ef62e85984e2ed0de8b5bc8bc5fb6 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 10 Jun 2017 16:22:27 -0700 Subject: [PATCH] Add receive time and frame number to video decoder callbacks --- .../limelight/nvstream/av/video/VideoDecoderRenderer.java | 2 +- .../main/java/com/limelight/nvstream/jni/MoonBridge.java | 4 ++-- moonlight-common/src/main/jni/moonlight-core/Android.mk | 2 +- moonlight-common/src/main/jni/moonlight-core/callbacks.c | 6 ++++-- .../src/main/jni/moonlight-core/moonlight-common-c | 2 +- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/moonlight-common/src/main/java/com/limelight/nvstream/av/video/VideoDecoderRenderer.java b/moonlight-common/src/main/java/com/limelight/nvstream/av/video/VideoDecoderRenderer.java index 6077e039..c5aad866 100644 --- a/moonlight-common/src/main/java/com/limelight/nvstream/av/video/VideoDecoderRenderer.java +++ b/moonlight-common/src/main/java/com/limelight/nvstream/av/video/VideoDecoderRenderer.java @@ -7,7 +7,7 @@ public abstract class VideoDecoderRenderer { public abstract void stop(); - public abstract int submitDecodeUnit(byte[] frameData, int frameLength); + public abstract int submitDecodeUnit(byte[] frameData, int frameLength, int frameNumber, long receiveTimeMs); public abstract void cleanup(); diff --git a/moonlight-common/src/main/java/com/limelight/nvstream/jni/MoonBridge.java b/moonlight-common/src/main/java/com/limelight/nvstream/jni/MoonBridge.java index 226e9c07..526b3379 100644 --- a/moonlight-common/src/main/java/com/limelight/nvstream/jni/MoonBridge.java +++ b/moonlight-common/src/main/java/com/limelight/nvstream/jni/MoonBridge.java @@ -60,9 +60,9 @@ public class MoonBridge { } } - public static int bridgeDrSubmitDecodeUnit(byte[] frameData, int frameLength) { + public static int bridgeDrSubmitDecodeUnit(byte[] frameData, int frameLength, int frameNumber, long receiveTimeMs) { if (videoRenderer != null) { - return videoRenderer.submitDecodeUnit(frameData, frameLength); + return videoRenderer.submitDecodeUnit(frameData, frameLength, frameNumber, receiveTimeMs); } else { return DR_OK; diff --git a/moonlight-common/src/main/jni/moonlight-core/Android.mk b/moonlight-common/src/main/jni/moonlight-core/Android.mk index 1151b40a..3bcb3936 100644 --- a/moonlight-common/src/main/jni/moonlight-core/Android.mk +++ b/moonlight-common/src/main/jni/moonlight-core/Android.mk @@ -43,7 +43,7 @@ LOCAL_C_INCLUDES := $(LOCAL_PATH)/moonlight-common-c/enet/include \ $(LOCAL_PATH)/moonlight-common-c/reedsolomon \ $(LOCAL_PATH)/moonlight-common-c/src \ -LOCAL_CFLAGS := -DHAS_SOCKLEN_T=1 -DLC_ANDROID +LOCAL_CFLAGS := -DHAS_SOCKLEN_T=1 -DLC_ANDROID -DHAVE_CLOCK_GETTIME=1 ifeq ($(NDK_DEBUG),1) LOCAL_CFLAGS += -DLC_DEBUG diff --git a/moonlight-common/src/main/jni/moonlight-core/callbacks.c b/moonlight-common/src/main/jni/moonlight-core/callbacks.c index 0bc2c042..8eabfa29 100644 --- a/moonlight-common/src/main/jni/moonlight-core/callbacks.c +++ b/moonlight-common/src/main/jni/moonlight-core/callbacks.c @@ -79,7 +79,7 @@ Java_com_limelight_nvstream_jni_MoonBridge_init(JNIEnv *env, jobject class) { BridgeDrStartMethod = (*env)->GetStaticMethodID(env, class, "bridgeDrStart", "()V"); BridgeDrStopMethod = (*env)->GetStaticMethodID(env, class, "bridgeDrStop", "()V"); BridgeDrCleanupMethod = (*env)->GetStaticMethodID(env, class, "bridgeDrCleanup", "()V"); - BridgeDrSubmitDecodeUnitMethod = (*env)->GetStaticMethodID(env, class, "bridgeDrSubmitDecodeUnit", "([BI)I"); + BridgeDrSubmitDecodeUnitMethod = (*env)->GetStaticMethodID(env, class, "bridgeDrSubmitDecodeUnit", "([BIIJ)I"); BridgeArInitMethod = (*env)->GetStaticMethodID(env, class, "bridgeArInit", "(I)I"); BridgeArStartMethod = (*env)->GetStaticMethodID(env, class, "bridgeArStart", "()V"); BridgeArStopMethod = (*env)->GetStaticMethodID(env, class, "bridgeArStop", "()V"); @@ -173,7 +173,9 @@ int BridgeDrSubmitDecodeUnit(PDECODE_UNIT decodeUnit) { currentEntry = currentEntry->next; } - return (*env)->CallStaticIntMethod(env, GlobalBridgeClass, BridgeDrSubmitDecodeUnitMethod, DecodedFrameBuffer, decodeUnit->fullLength); + return (*env)->CallStaticIntMethod(env, GlobalBridgeClass, BridgeDrSubmitDecodeUnitMethod, + DecodedFrameBuffer, decodeUnit->fullLength, decodeUnit->frameNumber, + decodeUnit->receiveTimeMs); } int BridgeArInit(int audioConfiguration, POPUS_MULTISTREAM_CONFIGURATION opusConfig) { diff --git a/moonlight-common/src/main/jni/moonlight-core/moonlight-common-c b/moonlight-common/src/main/jni/moonlight-core/moonlight-common-c index c01deff6..99cfae7a 160000 --- a/moonlight-common/src/main/jni/moonlight-core/moonlight-common-c +++ b/moonlight-common/src/main/jni/moonlight-core/moonlight-common-c @@ -1 +1 @@ -Subproject commit c01deff683d9192a71f851815dbea4bba14e4f04 +Subproject commit 99cfae7accd4e961806c5f5edc987f5f92a1ba29