mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2025-07-20 03:23:07 +00:00
Handle decode units larger than the size of the decode unit buffer
This commit is contained in:
parent
e1a8f86d4f
commit
db78af916d
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user