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..c2c2d7af6 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 BUFFER_PROCESSED_OK; + } + //TODO handle VP8PayloadDescriptor returning invalid. int inPayloadLength = inLength - inPdSize; + if (logger.isTraceEnabled()) + { + logger.trace("inPayload 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);