From 01340ac985ca2e297817c14244a5d185586fdc71 Mon Sep 17 00:00:00 2001 From: Paul Gregoire Date: Wed, 2 Mar 2016 11:40:48 -0500 Subject: [PATCH 1/2] Fixed handling of empty buffer --- .../codec/video/vp8/DePacketizer.java | 38 +++++++++++++++---- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/src/org/jitsi/impl/neomedia/codec/video/vp8/DePacketizer.java b/src/org/jitsi/impl/neomedia/codec/video/vp8/DePacketizer.java index 89d141db0..0aca860e9 100644 --- a/src/org/jitsi/impl/neomedia/codec/video/vp8/DePacketizer.java +++ b/src/org/jitsi/impl/neomedia/codec/video/vp8/DePacketizer.java @@ -256,7 +256,23 @@ protected int doProcess(Buffer inBuffer, Buffer outBuffer) = VP8PayloadDescriptor.isStartOfFrame(inData, inOffset); int inLength = inBuffer.getLength(); int inPdSize = VP8PayloadDescriptor.getSize(inData, inOffset); + // handle when inbuffer is empty. + if (inLength < 1) + { + if (logger.isDebugEnabled()) + { + logger.debug("inBuffer is empty"); + } + outBuffer.setDiscard(true); + return 0; + } + //TODO handle VP8PayloadDescriptor returning invalid. int inPayloadLength = inLength - inPdSize; + if (logger.isTraceEnabled()) + { + logger.trace("outBuffer length " + inPayloadLength + " inLength " + + inLength); + } if (empty && lastSentSeq != -1 @@ -384,13 +400,21 @@ protected int doProcess(Buffer inBuffer, Buffer outBuffer) for (Map.Entry entry : data.entrySet()) { b = entry.getValue(); - System.arraycopy( - b.buf, - 0, - outData, - ptr, - b.len); - ptr += b.len; + try + { + System.arraycopy( + b.buf, + 0, + outData, + ptr, + b.len); + ptr += b.len; + } + catch (Exception e) + { + // ensure frameLength 0 on copy failure + frameLength = 0; + } } outBuffer.setOffset(0); From 8c9a19c8cda2576c6a9d84c0ca369ffc46d231c0 Mon Sep 17 00:00:00 2001 From: Paul Gregoire Date: Wed, 2 Mar 2016 12:38:11 -0500 Subject: [PATCH 2/2] Modified based on comments from bgrozev --- src/org/jitsi/impl/neomedia/codec/video/vp8/DePacketizer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/org/jitsi/impl/neomedia/codec/video/vp8/DePacketizer.java b/src/org/jitsi/impl/neomedia/codec/video/vp8/DePacketizer.java index 0aca860e9..c2c2d7af6 100644 --- a/src/org/jitsi/impl/neomedia/codec/video/vp8/DePacketizer.java +++ b/src/org/jitsi/impl/neomedia/codec/video/vp8/DePacketizer.java @@ -264,13 +264,13 @@ protected int doProcess(Buffer inBuffer, Buffer outBuffer) logger.debug("inBuffer is empty"); } outBuffer.setDiscard(true); - return 0; + return BUFFER_PROCESSED_OK; } //TODO handle VP8PayloadDescriptor returning invalid. int inPayloadLength = inLength - inPdSize; if (logger.isTraceEnabled()) { - logger.trace("outBuffer length " + inPayloadLength + " inLength " + + logger.trace("inPayload length " + inPayloadLength + " inLength " + inLength); }