Fix audio PTS when not monotonically increasing
Some decoders fail to guarantee that PTS must be monotonically increasing. Fix the PTS when they're not. Fixes #4054 <https://github.com/Genymobile/scrcpy/issues/4054>
This commit is contained in:
@@ -105,8 +105,17 @@ public final class AudioEncoder implements AsyncProcessor {
|
|||||||
private void outputThread(MediaCodec mediaCodec) throws IOException, InterruptedException {
|
private void outputThread(MediaCodec mediaCodec) throws IOException, InterruptedException {
|
||||||
streamer.writeAudioHeader();
|
streamer.writeAudioHeader();
|
||||||
|
|
||||||
|
long lastPts = 0;
|
||||||
while (!Thread.currentThread().isInterrupted()) {
|
while (!Thread.currentThread().isInterrupted()) {
|
||||||
OutputTask task = outputTasks.take();
|
OutputTask task = outputTasks.take();
|
||||||
|
|
||||||
|
if (task.bufferInfo.presentationTimeUs < lastPts) {
|
||||||
|
// Fix PTS if not monotonically increasing
|
||||||
|
task.bufferInfo.presentationTimeUs = lastPts;
|
||||||
|
} else {
|
||||||
|
lastPts = task.bufferInfo.presentationTimeUs;
|
||||||
|
}
|
||||||
|
|
||||||
ByteBuffer buffer = mediaCodec.getOutputBuffer(task.index);
|
ByteBuffer buffer = mediaCodec.getOutputBuffer(task.index);
|
||||||
try {
|
try {
|
||||||
streamer.writePacket(buffer, task.bufferInfo);
|
streamer.writePacket(buffer, task.bufferInfo);
|
||||||
|
|||||||
Reference in New Issue
Block a user