From 4a41f992de0951f23175c3ae5b6eba35708a3f82 Mon Sep 17 00:00:00 2001 From: phuocnd Date: Wed, 12 Nov 2025 16:15:42 +0700 Subject: [PATCH] fix: window memory leak - memory increase while streaming --- crates/enc-mediafoundation/src/video/h264.rs | 21 ++++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/crates/enc-mediafoundation/src/video/h264.rs b/crates/enc-mediafoundation/src/video/h264.rs index 266c117d89d..716b9132720 100644 --- a/crates/enc-mediafoundation/src/video/h264.rs +++ b/crates/enc-mediafoundation/src/video/h264.rs @@ -435,23 +435,22 @@ impl H264Encoder { // (e.g., hardware encoder transient failures, specific MFT implementations). // This is a known contract violation by certain Media Foundation Transforms. // We handle this gracefully by skipping the frame instead of panicking. - let sample = { - let mut output_buffers = [output_buffer]; - self.transform - .ProcessOutput(0, &mut output_buffers, &mut status)?; - output_buffers[0].pSample.as_ref().cloned() - }; + let mut output_buffers = [output_buffer]; + self.transform.ProcessOutput(0, &mut output_buffers, &mut status)?; - if let Some(sample) = sample { + // Use the sample directly without cloning to prevent memory leaks + if let Some(sample) = output_buffers[0].pSample.take() { consecutive_empty_samples = 0; on_sample(sample)?; } else { consecutive_empty_samples += 1; if consecutive_empty_samples > MAX_CONSECUTIVE_EMPTY_SAMPLES { - return Err(windows::core::Error::new( - windows::core::HRESULT(0), - "Too many consecutive empty samples", - )); + return Err( + windows::core::Error::new( + windows::core::HRESULT(0), + "Too many consecutive empty samples" + ) + ); } } }