jcodec: BufferOverflowException with random pixel colors
JCodec version: most recent commit (790187004ba801a98743a52fb40e02b8a22be712)
Minimal (non)working example:
import java.io.File;
import java.io.IOException;
import java.util.Random;
import org.jcodec.api.SequenceEncoder8Bit;
import org.jcodec.common.model.ColorSpace;
import org.jcodec.common.model.Picture8Bit;
public class CrashTest
{
public static void main(String[] args) throws IOException
{
final SequenceEncoder8Bit seqEncoder = SequenceEncoder8Bit
.createSequenceEncoder8Bit(new File("out.mp4"), 30);
final Picture8Bit pic = Picture8Bit.create(1920, 1080, ColorSpace.RGB);
byte[] picData = pic.getPlaneData(0);
new Random().nextBytes(picData);
seqEncoder.encodeNativeFrame(pic);
seqEncoder.finish();
}
}
Which results in:
Exception in thread "main" java.nio.BufferOverflowException
at java.nio.Buffer.nextPutIndex(Buffer.java:521)
at java.nio.HeapByteBuffer.put(HeapByteBuffer.java:169)
at org.jcodec.common.io.BitWriter.putInt(BitWriter.java:43)
at org.jcodec.common.io.BitWriter.writeNBit(BitWriter.java:66)
at org.jcodec.codecs.h264.io.CAVLC.writeLevels(CAVLC.java:125)
at org.jcodec.codecs.h264.io.CAVLC.writeBlockGen(CAVLC.java:100)
at org.jcodec.codecs.h264.io.CAVLC.writeACBlock(CAVLC.java:52)
at org.jcodec.codecs.h264.encode.MBEncoderI16x16.writeAC(MBEncoderI16x16.java:157)
at org.jcodec.codecs.h264.encode.MBEncoderI16x16.chromaResidual(MBEncoderI16x16.java:88)
at org.jcodec.codecs.h264.encode.MBEncoderI16x16.chroma(MBEncoderI16x16.java:69)
at org.jcodec.codecs.h264.encode.MBEncoderI16x16.encodeMacroblock(MBEncoderI16x16.java:49)
at org.jcodec.codecs.h264.H264Encoder.encodeMacroblock(H264Encoder.java:295)
at org.jcodec.codecs.h264.H264Encoder.encodeSlice(H264Encoder.java:276)
at org.jcodec.codecs.h264.H264Encoder.doEncodeFrame8Bit(H264Encoder.java:167)
at org.jcodec.codecs.h264.H264Encoder.encodeFrame8Bit(H264Encoder.java:103)
at org.jcodec.api.SequenceEncoder8Bit.encodeNativeFrame(SequenceEncoder8Bit.java:101)
at CrashTest.main(CrashTest.java:22)
About this issue
- Original URL
- State: open
- Created 7 years ago
- Comments: 19 (5 by maintainers)
Fixed in cfcc80f1744f6f43033eb8a99ffa64d832a3ce5d
I managed to fix the problem. https://github.com/jcodec/jcodec/blob/master/src/main/java/org/jcodec/codecs/h264/H264Encoder.java#L241 I increased the buffer size by a factor of four works just fine now.