From 733b4e3497d36f2192585eb5b7f6d36712f0e3f2 Mon Sep 17 00:00:00 2001 From: George Politis Date: Wed, 2 Nov 2016 11:47:13 -0500 Subject: [PATCH 1/2] fix(ls-hack): Prevents a swallowed NPE when simulcast is not enabled. --- .../org/jitsi/videobridge/LipSyncHack.java | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/jitsi/videobridge/LipSyncHack.java b/src/main/java/org/jitsi/videobridge/LipSyncHack.java index b30fda9508..9c753c4a45 100644 --- a/src/main/java/org/jitsi/videobridge/LipSyncHack.java +++ b/src/main/java/org/jitsi/videobridge/LipSyncHack.java @@ -22,6 +22,7 @@ import org.jitsi.service.neomedia.*; import org.jitsi.util.*; import org.jitsi.util.concurrent.*; +import org.jitsi.videobridge.simulcast.*; import java.util.*; @@ -210,17 +211,37 @@ public void onRTPTranslatorWillWriteAudio( return; } + SimulcastReceiver recv = sourceVC.getTransformEngine() + .getSimulcastEngine().getSimulcastReceiver(); + + Long receiveVideoSSRC; + if (recv != null && recv.isSimulcastSignaled()) + { + // FIXME this is a little ugly + receiveVideoSSRC = sourceVC.getTransformEngine() + .getSimulcastEngine().getSimulcastReceiver() + .getSimulcastStream(0, targetVC.getStream()).getPrimarySSRC(); + } + else + { + int[] receiveSSRCs = sourceVC.getReceiveSSRCs(); + if (receiveSSRCs == null || receiveSSRCs.length == 0) + { + // It seems like we're not ready yet to trigger the hack. + return; + } + else + { + receiveVideoSSRC = receiveSSRCs[0] & 0xffffffffL; + } + } + // XXX we do this here (i.e. below the sanity checks), in order to avoid // any race conditions with a video channel being created and added to // its Endpoint. The disadvantage being that endpoints that only have an // audio channel will never reach this. acceptedAudioSSRCs.add(acceptedAudioSSRC); - // FIXME this is a little ugly - Long receiveVideoSSRC = sourceVC.getTransformEngine() - .getSimulcastEngine().getSimulcastReceiver() - .getSimulcastStream(0, targetVC.getStream()).getPrimarySSRC(); - synchronized (states) { if (states.containsKey(receiveVideoSSRC)) From 2bdac96f7981c4333f394ff7930b66c45ba6e130 Mon Sep 17 00:00:00 2001 From: George Politis Date: Wed, 2 Nov 2016 12:32:51 -0500 Subject: [PATCH 2/2] style(ls-hack): Reuses variable. --- src/main/java/org/jitsi/videobridge/LipSyncHack.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/jitsi/videobridge/LipSyncHack.java b/src/main/java/org/jitsi/videobridge/LipSyncHack.java index 9c753c4a45..6615277a74 100644 --- a/src/main/java/org/jitsi/videobridge/LipSyncHack.java +++ b/src/main/java/org/jitsi/videobridge/LipSyncHack.java @@ -218,9 +218,8 @@ public void onRTPTranslatorWillWriteAudio( if (recv != null && recv.isSimulcastSignaled()) { // FIXME this is a little ugly - receiveVideoSSRC = sourceVC.getTransformEngine() - .getSimulcastEngine().getSimulcastReceiver() - .getSimulcastStream(0, targetVC.getStream()).getPrimarySSRC(); + receiveVideoSSRC = recv.getSimulcastStream( + 0, targetVC.getStream()).getPrimarySSRC(); } else {