From 09bf746e9dcc1d5eabbdddc80a5ab8dc3f2971a3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 4 Mar 2026 10:50:05 +0000 Subject: [PATCH 1/2] Initial plan From d64fd2f8621ff48582858446925b11d2b188f5b4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 4 Mar 2026 11:06:51 +0000 Subject: [PATCH 2/2] Include buffering time in ReadDuration for non-seekable streams Co-authored-by: iwillspeak <1004401+iwillspeak@users.noreply.github.com> --- src/PdqHash/PdqHasher.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/PdqHash/PdqHasher.cs b/src/PdqHash/PdqHasher.cs index 3986702..437f4d0 100644 --- a/src/PdqHash/PdqHasher.cs +++ b/src/PdqHash/PdqHasher.cs @@ -65,16 +65,16 @@ private static void ComputeDCTMatrix(Memory memory) public HashResult? FromStream(Stream input, string source) { - if (!input.CanSeek) + var stopwatch = Stopwatch.StartNew(); + + using var bufferedStream = input.CanSeek ? null : new MemoryStream(); + if (bufferedStream != null) { - using var buffered = new MemoryStream(); - input.CopyTo(buffered); - buffered.Position = 0; - return FromStream(buffered, source); + input.CopyTo(bufferedStream); + bufferedStream.Position = 0; + input = bufferedStream; } - var stopwatch = Stopwatch.StartNew(); - using var codec = SKCodec.Create(input, out var result); if (codec == null)