Handle decode units larger than the size of the decode unit buffer

This commit is contained in:
Cameron Gutman 2013-11-22 00:29:48 -05:00
parent e1a8f86d4f
commit db78af916d

View File

@ -145,12 +145,28 @@ public class CpuDecoderRenderer implements DecoderRenderer {
@Override @Override
public boolean submitDecodeUnit(AvDecodeUnit decodeUnit) { public boolean submitDecodeUnit(AvDecodeUnit decodeUnit) {
byte[] data;
// Use the reserved decoder buffer if this decode unit will fit
if (decodeUnit.getDataLength() <= decoderBuffer.limit()) {
decoderBuffer.clear(); decoderBuffer.clear();
for (AvByteBufferDescriptor bbd : decodeUnit.getBufferList()) { for (AvByteBufferDescriptor bbd : decodeUnit.getBufferList()) {
decoderBuffer.put(bbd.data, bbd.offset, bbd.length); decoderBuffer.put(bbd.data, bbd.offset, bbd.length);
} }
return (AvcDecoder.decode(decoderBuffer.array(), 0, decodeUnit.getDataLength()) == 0); data = decoderBuffer.array();
}
else {
data = new byte[decodeUnit.getDataLength()];
int offset = 0;
for (AvByteBufferDescriptor bbd : decodeUnit.getBufferList()) {
System.arraycopy(bbd.data, bbd.offset, data, offset, bbd.length);
offset += bbd.length;
}
}
return (AvcDecoder.decode(data, 0, decodeUnit.getDataLength()) == 0);
} }
} }