From dd82573d080a6da3baed6bc76edc1f9fccee4963 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 24 Nov 2013 19:31:50 -0500 Subject: [PATCH] Switch from ArrayBlockingQueues to LinkedBlockingQueues for increased throughput. Set thread priorities for the decoder and ping threads. --- src/com/limelight/nvstream/NvAudioStream.java | 9 +++++---- src/com/limelight/nvstream/NvVideoStream.java | 6 ++++-- .../limelight/nvstream/av/audio/AvAudioDepacketizer.java | 8 +++++--- .../limelight/nvstream/av/video/AvVideoDepacketizer.java | 6 +++--- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/com/limelight/nvstream/NvAudioStream.java b/src/com/limelight/nvstream/NvAudioStream.java index f6d17065..9c722924 100644 --- a/src/com/limelight/nvstream/NvAudioStream.java +++ b/src/com/limelight/nvstream/NvAudioStream.java @@ -7,7 +7,7 @@ import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketException; import java.util.LinkedList; -import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; import com.limelight.nvstream.av.AvByteBufferDescriptor; import com.limelight.nvstream.av.AvRtpPacket; @@ -23,7 +23,7 @@ public class NvAudioStream { public static final int RTP_PORT = 48000; public static final int RTCP_PORT = 47999; - private ArrayBlockingQueue packets = new ArrayBlockingQueue(100); + private LinkedBlockingQueue packets = new LinkedBlockingQueue(100); private AudioTrack track; @@ -171,9 +171,9 @@ public class NvAudioStream { return; } - track.write(samples.data, samples.offset, samples.length); + track.write(samples.data, samples.offset, samples.length); + } } - } }; threads.add(t); t.setName("Audio - Player"); @@ -243,6 +243,7 @@ public class NvAudioStream { } }; threads.add(t); + t.setPriority(Thread.MIN_PRIORITY); t.setName("Audio - Ping"); t.start(); } diff --git a/src/com/limelight/nvstream/NvVideoStream.java b/src/com/limelight/nvstream/NvVideoStream.java index 2af56165..b3d904fa 100644 --- a/src/com/limelight/nvstream/NvVideoStream.java +++ b/src/com/limelight/nvstream/NvVideoStream.java @@ -9,7 +9,7 @@ import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketException; import java.util.LinkedList; -import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; import com.limelight.nvstream.av.AvByteBufferDescriptor; import com.limelight.nvstream.av.AvDecodeUnit; @@ -31,7 +31,7 @@ public class NvVideoStream { public static final int FIRST_FRAME_TIMEOUT = 5000; - private ArrayBlockingQueue packets = new ArrayBlockingQueue(100); + private LinkedBlockingQueue packets = new LinkedBlockingQueue(100); private InetAddress host; private DatagramSocket rtp; @@ -207,6 +207,7 @@ public class NvVideoStream { }; threads.add(t); t.setName("Video - Decoder"); + t.setPriority(Thread.MAX_PRIORITY); t.start(); } @@ -302,6 +303,7 @@ public class NvVideoStream { }; threads.add(t); t.setName("Video - Ping"); + t.setPriority(Thread.MIN_PRIORITY); t.start(); } } diff --git a/src/com/limelight/nvstream/av/audio/AvAudioDepacketizer.java b/src/com/limelight/nvstream/av/audio/AvAudioDepacketizer.java index 7d97515b..a13cf3ef 100644 --- a/src/com/limelight/nvstream/av/audio/AvAudioDepacketizer.java +++ b/src/com/limelight/nvstream/av/audio/AvAudioDepacketizer.java @@ -1,14 +1,16 @@ package com.limelight.nvstream.av.audio; -import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; import com.limelight.nvstream.av.AvByteBufferDescriptor; import com.limelight.nvstream.av.AvRtpPacket; import com.limelight.nvstream.av.AvShortBufferDescriptor; public class AvAudioDepacketizer { - private ArrayBlockingQueue decodedUnits = - new ArrayBlockingQueue(15); + + private static final int DU_LIMIT = 15; + private LinkedBlockingQueue decodedUnits = + new LinkedBlockingQueue(DU_LIMIT); // Sequencing state private short lastSequenceNumber; diff --git a/src/com/limelight/nvstream/av/video/AvVideoDepacketizer.java b/src/com/limelight/nvstream/av/video/AvVideoDepacketizer.java index 8dff6a19..3aa77d55 100644 --- a/src/com/limelight/nvstream/av/video/AvVideoDepacketizer.java +++ b/src/com/limelight/nvstream/av/video/AvVideoDepacketizer.java @@ -1,7 +1,7 @@ package com.limelight.nvstream.av.video; import java.util.LinkedList; -import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; import com.limelight.nvstream.av.AvByteBufferDescriptor; import com.limelight.nvstream.av.AvDecodeUnit; @@ -26,8 +26,8 @@ public class AvVideoDepacketizer { private ConnectionStatusListener controlListener; - private static final int DU_LIMIT = 30; - private ArrayBlockingQueue decodedUnits = new ArrayBlockingQueue(DU_LIMIT); + private static final int DU_LIMIT = 15; + private LinkedBlockingQueue decodedUnits = new LinkedBlockingQueue(DU_LIMIT); public AvVideoDepacketizer(ConnectionStatusListener controlListener) {