From 3b71612b31367bf1c957cd9dd978a99e8c24b5ec Mon Sep 17 00:00:00 2001 From: Simon Chan <1330321+yume-chan@users.noreply.github.com> Date: Thu, 28 Aug 2025 15:00:56 +0800 Subject: [PATCH] fix(decoder): don't modify packet pts --- .../scrcpy-decoder-webcodecs/src/video/decoder.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/libraries/scrcpy-decoder-webcodecs/src/video/decoder.ts b/libraries/scrcpy-decoder-webcodecs/src/video/decoder.ts index 5fa3b989..2c4a1774 100644 --- a/libraries/scrcpy-decoder-webcodecs/src/video/decoder.ts +++ b/libraries/scrcpy-decoder-webcodecs/src/video/decoder.ts @@ -160,9 +160,11 @@ export class WebCodecsVideoDecoder implements ScrcpyVideoDecoder { this.#pause = new PauseControllerImpl( (packet) => this.#decoder.decode(packet), (packet, skipRendering) => { + let pts: bigint; + if (skipRendering) { // Set `pts` to 0 as a marker for skipping rendering this frame - packet.pts = 0n; + pts = 0n; } else { // Set `pts` to current time to track decoding time @@ -175,9 +177,15 @@ export class WebCodecsVideoDecoder implements ScrcpyVideoDecoder { // Multiply `performance.now()` by 1000 to get microseconds. // Use string concatenation to prevent precision loss. - packet.pts = BigInt(ms + (us + "000").slice(0, 3)); + pts = BigInt(ms + (us + "000").slice(0, 3)); } - return this.#decoder.decode(packet); + + // Create a copy of `packet` because other code (like recording) + // needs the original `pts` + return this.#decoder.decode({ + ...packet, + pts, + }); }, );