From 68a9996eb2a1d91ab8d9b0ddf4b152903a4b85bc Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Fri, 2 Jun 2023 21:39:29 +0200 Subject: [PATCH] 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 --- .../main/java/com/genymobile/scrcpy/AudioEncoder.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/server/src/main/java/com/genymobile/scrcpy/AudioEncoder.java b/server/src/main/java/com/genymobile/scrcpy/AudioEncoder.java index 108bbaa1..460017d4 100644 --- a/server/src/main/java/com/genymobile/scrcpy/AudioEncoder.java +++ b/server/src/main/java/com/genymobile/scrcpy/AudioEncoder.java @@ -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);