diff options
Diffstat (limited to 'base/src/main/java/com/smartdevicelink')
-rw-r--r-- | base/src/main/java/com/smartdevicelink/streaming/video/RTPH264Packetizer.java | 14 |
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(); |