From 4e8ab9cf450177df3f191a170456cafe4101d5b8 Mon Sep 17 00:00:00 2001 From: webadderall <131426131+webadderall@users.noreply.github.com> Date: Sat, 28 Mar 2026 17:03:41 +1100 Subject: [PATCH] fix(windows): finalize WGC recordings safely --- .../bin/win32-x64/helpers-manifest.json | 6 ++--- electron/native/bin/win32-x64/wgc-capture.exe | Bin 91648 -> 92160 bytes electron/native/wgc-capture/src/main.cpp | 23 +++++++++++++---- .../native/wgc-capture/src/mf_encoder.cpp | 24 +++++++++++++----- 4 files changed, 39 insertions(+), 14 deletions(-) diff --git a/electron/native/bin/win32-x64/helpers-manifest.json b/electron/native/bin/win32-x64/helpers-manifest.json index 234719bf..8713d1c3 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": "72d8f0703a5360a0e911a95bf8839354c877df5fa51294af75ded83a17c0c32e", + "binarySha256": "5f364b07b016c597288f90a9b61c581e6559d6d32b79ffadceb37859bbea8dd2", "sourceDir": "electron/native/wgc-capture", - "sourceFingerprint": "f30dee6b4956a5b57f4fc4d8d586f3470c793c8f7e3242f4160394debbb3f3be", - "updatedAt": "2026-03-28T05:17:10.449Z" + "sourceFingerprint": "9e9bce082266ca5968cf5f0b535b469d47c4ec3a775a93726171c0dfdbcdaa44", + "updatedAt": "2026-03-28T05:48:46.587Z" }, "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 2973f783f9797c58f382135725ad36f10afb3f46..ac92a80bf697d8a0a2b405ff7960822375be937d 100644 GIT binary patch delta 31907 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 #include #include +#include static std::atomic g_stopRequested{false}; static std::atomic g_pauseRequested{false}; @@ -249,6 +250,7 @@ int main(int argc, char* argv[]) { // Set up frame callback std::atomic frameCount{0}; + std::atomic recordingStartedAnnounced{false}; session.setFrameCallback([&](ID3D11Texture2D* texture, int64_t timestampHns) { g_lastFrameTimestampHns = timestampHns; if (g_stopRequested) return; @@ -269,7 +271,11 @@ int main(int argc, char* argv[]) { } if (encoder.writeFrame(texture, adjustedTimestampHns)) { - frameCount++; + const int64_t writtenFrames = frameCount.fetch_add(1) + 1; + if (writtenFrames == 1 && !recordingStartedAnnounced.exchange(true)) { + std::cout << "Recording started" << std::endl; + std::cout.flush(); + } } }); @@ -312,9 +318,6 @@ int main(int argc, char* argv[]) { micActive = micCapture.start(); } - std::cout << "Recording started" << std::endl; - std::cout.flush(); - // Wait for stop signal while pausing/resuming audio tracks in lockstep. while (!g_stopRequested) { if (g_pauseRequested) { @@ -333,7 +336,17 @@ int main(int argc, char* argv[]) { session.stopCapture(); if (audioActive) loopback.stop(); if (micActive) micCapture.stop(); - encoder.finalize(); + + if (frameCount.load() <= 0) { + std::cerr << "ERROR: No video frames were captured before stop" << std::endl; + DeleteFileW(outputPathW.c_str()); + return 1; + } + + if (!encoder.finalize()) { + std::cerr << "ERROR: Failed to finalize Media Foundation encoder" << std::endl; + return 1; + } std::cout << "Recording stopped. Output path: " << config.outputPath << std::endl; if (audioActive) { diff --git a/electron/native/wgc-capture/src/mf_encoder.cpp b/electron/native/wgc-capture/src/mf_encoder.cpp index a1474c20..00eea688 100644 --- a/electron/native/wgc-capture/src/mf_encoder.cpp +++ b/electron/native/wgc-capture/src/mf_encoder.cpp @@ -22,6 +22,8 @@ MFEncoder::~MFEncoder() { bool MFEncoder::initialize(const std::wstring& outputPath, int width, int height, int fps, ID3D11Device* device, ID3D11DeviceContext* context) { + std::lock_guard lock(mutex_); + if (initialized_) return false; if (width % 2 != 0 || height % 2 != 0) { @@ -124,6 +126,8 @@ bool MFEncoder::initialize(const std::wstring& outputPath, int width, int height } bool MFEncoder::writeFrame(ID3D11Texture2D* texture, int64_t timestampHns) { + std::lock_guard lock(mutex_); + if (!initialized_ || !sinkWriter_) return false; context_->CopyResource(stagingTexture_.Get(), texture); @@ -186,20 +190,28 @@ bool MFEncoder::writeFrame(ID3D11Texture2D* texture, int64_t timestampHns) { sample->SetSampleDuration(10000000LL / fps_); hr = sinkWriter_->WriteSample(streamIndex_, sample.Get()); + if (FAILED(hr)) { + std::cerr << "ERROR: WriteSample failed: 0x" << std::hex << hr << std::endl; + } return SUCCEEDED(hr); } bool MFEncoder::finalize() { - if (!initialized_) return false; - initialized_ = false; + std::lock_guard lock(mutex_); + if (!initialized_) return false; + if (!sinkWriter_) return false; + + HRESULT hr = sinkWriter_->Finalize(); + if (FAILED(hr)) { + std::cerr << "ERROR: SinkWriter Finalize failed: 0x" << std::hex << hr << std::endl; + } + + initialized_ = false; + sinkWriter_.Reset(); stagingTexture_.Reset(); nv12Buffer_.clear(); nv12Buffer_.shrink_to_fit(); - - if (!sinkWriter_) return false; - HRESULT hr = sinkWriter_->Finalize(); - sinkWriter_.Reset(); MFShutdown(); return SUCCEEDED(hr); }