Fix audio PTS when not monotonically increasing

Some decoders fail to guarantee that PTS must be strictly monotonically
increasing. Fix the PTS when they are not.

Fixes #4054 <https://github.com/Genymobile/scrcpy/issues/4054>
This commit is contained in:
Romain Vimont 2023-06-02 21:39:29 +02:00
parent 2aec7b4c9d
commit 68a9996eb2

View File

@ -105,8 +105,17 @@ public final class AudioEncoder implements AsyncProcessor {
private void outputThread(MediaCodec mediaCodec) throws IOException, InterruptedException {
streamer.writeAudioHeader();
long lastPts = 0;
while (!Thread.currentThread().isInterrupted()) {
OutputTask task = outputTasks.take();
if (task.bufferInfo.presentationTimeUs <= lastPts) {
// Fix PTS if not strictly monotonically increasing
task.bufferInfo.presentationTimeUs = ++lastPts;
} else {
lastPts = task.bufferInfo.presentationTimeUs;
}
ByteBuffer buffer = mediaCodec.getOutputBuffer(task.index);
try {
streamer.writePacket(buffer, task.bufferInfo);