From 6227eb8955bd6d6a6072aedffd037045d0b20de4 Mon Sep 17 00:00:00 2001 From: wiiiii123 Date: Fri, 22 May 2026 15:56:36 +0700 Subject: [PATCH] fix(windows): preserve WGC duration through static frames --- .../bin/win32-x64/helpers-manifest.json | 6 ++--- electron/native/bin/win32-x64/wgc-capture.exe | Bin 109568 -> 109568 bytes .../native/wgc-capture/src/mf_encoder.cpp | 24 +++++++++++++++--- electron/native/wgc-capture/src/mf_encoder.h | 1 + 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/electron/native/bin/win32-x64/helpers-manifest.json b/electron/native/bin/win32-x64/helpers-manifest.json index bbcef557..d89ffe42 100644 --- a/electron/native/bin/win32-x64/helpers-manifest.json +++ b/electron/native/bin/win32-x64/helpers-manifest.json @@ -5,10 +5,10 @@ "helpers": { "wgc-capture": { "binaryName": "wgc-capture.exe", - "binarySha256": "4f8873abbff58add37672114184c154dee838939ee8f2b7df45d658d078af28c", + "binarySha256": "a04ecf49a5c0b9b92dfb9cd3aa1468178f7a144ac8b78b433e99b34425e35eac", "sourceDir": "electron/native/wgc-capture", - "sourceFingerprint": "6f725fad6eb515d81b2d553ec45ddbf7c681d2725bba48f0c0722ce00166d967", - "updatedAt": "2026-05-09T00:49:28.306Z" + "sourceFingerprint": "ef3602f1641538a9a19def9da84f1fcd8e37eb53f3e55c1ddf46f26ba75eb54c", + "updatedAt": "2026-05-22T08:56:01.149Z" }, "cursor-monitor": { "binaryName": "cursor-monitor.exe", diff --git a/electron/native/bin/win32-x64/wgc-capture.exe b/electron/native/bin/win32-x64/wgc-capture.exe index 37de4c9c730e3afe13b2ba44f1cdb2302604917a..87fed12396aea5ebae7b01d23a6d1bc78bbcd51b 100644 GIT binary patch delta 13681 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 diff --git a/electron/native/wgc-capture/src/mf_encoder.cpp b/electron/native/wgc-capture/src/mf_encoder.cpp index 1a89b21e..b84eacba 100644 --- a/electron/native/wgc-capture/src/mf_encoder.cpp +++ b/electron/native/wgc-capture/src/mf_encoder.cpp @@ -227,6 +227,12 @@ bool MFEncoder::writeFrame(ID3D11Texture2D* texture, int64_t timestampHns) { context_->Unmap(stagingTexture_.Get(), 0); + // WGC may stop delivering frames while the scene is static; keep the MP4 + // timeline continuous by repeating the previous frame before writing a new one. + if (!lastFrameBuffer_.empty() && !extendLastFrameToLocked(timestampHns)) { + return false; + } + bool wroteSample = writeNv12SampleLocked(nv12Buffer_, timestampHns); if (wroteSample) { lastFrameBuffer_ = nv12Buffer_; @@ -238,19 +244,29 @@ bool MFEncoder::writeFrame(ID3D11Texture2D* texture, int64_t timestampHns) { bool MFEncoder::extendLastFrameTo(int64_t timestampHns) { std::lock_guard lock(mutex_); + return extendLastFrameToLocked(timestampHns); +} + +bool MFEncoder::extendLastFrameToLocked(int64_t timestampHns) { if (!initialized_ || !sinkWriter_) return false; if (lastFrameBuffer_.empty()) return false; + if (lastSampleTimeHns_ < 0) return false; const int64_t frameDurationHns = 10000000LL / fps_; - if (lastSampleTimeHns_ >= 0 && timestampHns <= lastSampleTimeHns_ + frameDurationHns) { + if (frameDurationHns <= 0) return false; + if (timestampHns <= lastSampleTimeHns_ + frameDurationHns) { return true; } - if (!writeNv12SampleLocked(lastFrameBuffer_, timestampHns)) { - return false; + int64_t nextSampleTimeHns = lastSampleTimeHns_ + frameDurationHns; + while (nextSampleTimeHns + frameDurationHns <= timestampHns) { + if (!writeNv12SampleLocked(lastFrameBuffer_, nextSampleTimeHns)) { + return false; + } + lastSampleTimeHns_ = nextSampleTimeHns; + nextSampleTimeHns += frameDurationHns; } - lastSampleTimeHns_ = timestampHns; return true; } diff --git a/electron/native/wgc-capture/src/mf_encoder.h b/electron/native/wgc-capture/src/mf_encoder.h index 48fdeaad..2c25da02 100644 --- a/electron/native/wgc-capture/src/mf_encoder.h +++ b/electron/native/wgc-capture/src/mf_encoder.h @@ -24,6 +24,7 @@ public: bool finalize(); private: + bool extendLastFrameToLocked(int64_t timestampHns); bool writeNv12SampleLocked(const std::vector& frameBuffer, int64_t timestampHns); ComPtr sinkWriter_;