summaryrefslogtreecommitdiff
path: root/base/src/main/java/com/smartdevicelink
diff options
context:
space:
mode:
Diffstat (limited to 'base/src/main/java/com/smartdevicelink')
-rw-r--r--base/src/main/java/com/smartdevicelink/streaming/video/RTPH264Packetizer.java14
1 files changed, 13 insertions, 1 deletions
diff --git a/base/src/main/java/com/smartdevicelink/streaming/video/RTPH264Packetizer.java b/base/src/main/java/com/smartdevicelink/streaming/video/RTPH264Packetizer.java
index 6a98c879e..241186340 100644
--- a/base/src/main/java/com/smartdevicelink/streaming/video/RTPH264Packetizer.java
+++ b/base/src/main/java/com/smartdevicelink/streaming/video/RTPH264Packetizer.java
@@ -37,6 +37,7 @@ import com.smartdevicelink.protocol.ProtocolMessage;
import com.smartdevicelink.protocol.enums.SessionType;
import com.smartdevicelink.streaming.AbstractPacketizer;
import com.smartdevicelink.streaming.IStreamListener;
+import com.smartdevicelink.util.DebugTool;
import java.io.IOException;
import java.nio.ByteBuffer;
@@ -64,6 +65,8 @@ import java.util.concurrent.LinkedBlockingQueue;
@RestrictTo(RestrictTo.Scope.LIBRARY)
public class RTPH264Packetizer extends AbstractPacketizer implements IVideoStreamListener, Runnable {
+ private static final String TAG = "RTPH264Packetizer";
+
// Approximate size of data that mOutputQueue can hold in bytes.
// By adding a buffer, we accept underlying transport being stuck for a short time. By setting
// a limit of the buffer size, we avoid buffer overflows when underlying transport is too slow.
@@ -172,6 +175,10 @@ public class RTPH264Packetizer extends AbstractPacketizer implements IVideoStrea
return;
}
+ if(mOutputQueue != null){
+ mOutputQueue.clear();
+ }
+
mThread = new Thread(this);
mThread.start();
}
@@ -295,13 +302,18 @@ public class RTPH264Packetizer extends AbstractPacketizer implements IVideoStrea
}
private boolean outputRTPFrames(ByteBuffer nalUnit, long ptsInUs, boolean isLast) {
+ if((mThread == null || mThread.isInterrupted())) {
+ DebugTool.logError(TAG, "Dropping potential buffer because consumer thread is not alive");
+ return false;
+ }
+
if (RTP_HEADER_LEN + nalUnit.remaining() > MAX_RTP_PACKET_SIZE) {
// Split into multiple Fragmentation Units ([5.8] in RFC 6184)
byte firstByte = nalUnit.get();
boolean firstFragment = true;
boolean lastFragment = false;
- while (nalUnit.remaining() > 0) {
+ while (nalUnit.remaining() > 0 && mThread != null && !mThread.isInterrupted()) {
int payloadLength = MAX_RTP_PACKET_SIZE - (RTP_HEADER_LEN + FU_INDICATOR_LEN + FU_HEADER_LEN);
if (nalUnit.remaining() <= payloadLength) {
payloadLength = nalUnit.remaining();