Releases: JunliangRen/vhs-decode-dotnet
Release list
vhs-decode-dotnet-v0.4.0-1.5.0
Highlights
- Eligible multi-worker compact VHS decodes now materialize
Video,Envelope, andChromawhile low-pass-only sync analysis continues. - The overlap is limited to one bounded staged span per decoder. Single-worker, sharpness/stateful, RF-diagnostic, and single-block paths retain eager behavior.
- Block ownership, cache eviction, exception precedence, DC-offset handling, ordered output, and deterministic commit remain compatibility-gated.
- The English, Simplified Chinese, and Japanese overview and detailed performance references now contain the refreshed 60-run matrix and scoped long-pair evidence.
- The standard xUnit v3 suite now contains 1,331 discoverable tests.
Validation
- PR #119 was squash-merged through protected
mainatced6afbcf9d2ab66ec0e5efdf553d4ec7af0182eafter an independent local sub-agent review found no actionable issues. - Protected-main workflow run 30922550787 passed the Intel IPP native bridge, Release build, all 1,331 tests, scalar fallback gates, win-x64 single-file publish, and artifact upload.
- Local Release build completed with 0 warnings and 0 errors. The full 1,331-test suite passed normally, with AVX2 disabled, and with all hardware intrinsics disabled.
- On the same private local 40 MHz PAL VHS fixture, Exact and IPP-fast baseline/candidate gates matched luma, chroma, raw JSON, stdout, normalized stderr/logs, and every ordered
fileLocfor both v0.4.0 andcurrent. Default,--threads 0, and--threads 20determinism gates also matched. - Two reverse-order 1,000-frame Exact pairs moved v0.4.0 from 49.195 to 47.886 seconds (2.66% lower, 1.027x throughput) and
currentfrom 43.986 to 42.862 seconds (2.55% lower, 1.026x throughput). - Two reverse-order 600-frame IPP-fast pairs moved v0.4.0 from 28.758 to 28.226 seconds (1.85% lower);
currentremained neutral at 23.415 versus 23.422 seconds (-0.03%). Peak working sets remained bounded in the audited range. - The packaged executable contains one file and passed VHS, CVBS, LD, and HiFi
--helpstartup smoke tests after extraction from the final ZIP.
Python v0.4.0 g4315520 --threads 0 remains the strict oracle for the v0.4.0 profile. Merged Python PR341 remains the profile peer for current; Python output hashes can vary across nonzero worker counts.
Package
Windows x64 binary-only package containing a single self-contained decode.exe.
decode.exeSHA-256:B2A081826E592BC0B4553CB5CB29FDCAB18D2D09C63DC4B6BBCEA00C2DDA955F- ZIP SHA-256:
D9FB3A491A0650BA6BE5E693DDB0C68FE15B44FA9AB7ECDAD792BBA6F3995F2D
vhs-decode-dotnet-v0.4.0-1.4.6
Highlights
- Exact VHS
currentdecoding above 12 requested workers now overlaps two independent RF inverse FFT stages after preserving the original serial spectrum preparation. - Default and 1-12-worker runs, the v0.4.0 profile, non-VHS commands,
--gnrc, andipp-fastretain their established serial staging. - The optimization adds no sample-length buffer, keeps outer block concurrency bounded at 12, preserves public constructor signatures and serial exception priority, and falls back to the original serial sequence if companion-task scheduling fails.
- The English, Simplified Chinese, and Japanese overview and detailed performance references now record the scoped result separately from the repeated 40-frame matrix.
- The standard xUnit v3 suite now contains 1,273 discoverable tests.
Validation
- PR #106 was squash-merged through protected
mainat3803e7bd709b51c40638f4751b4027dc540fe7aaafter a clean independent local sub-agent review. - Protected-main workflow run 30795052947 passed the Intel IPP native bridge, Release build, all 1,273 tests, win-x64 single-file publish, and artifact upload.
- Local Release build completed with 0 warnings and 0 errors; all 1,273 tests passed.
- One fixed 200-frame Exact
current --threads 20gate on the same private local 40 MHz PAL VHS fixture matched exit status, field count, luma, chroma, raw JSON, stdout, normalized stderr, normalized log, and every orderedfileLoc. - In that scoped pair, wall time moved from 11.945 s to 11.480 s (3.89% lower, 1.041x throughput), process CPU time from 95.359 s to 90.828 s (4.75% lower), and active cores from 7.98 to 7.91. The harness did not return a usable peak-working-set value, so no measured-memory claim is made.
- The packaged executable contains one file and passed VHS, CVBS, LD, and HiFi
--helpstartup smoke tests after extraction from the final ZIP.
Python v0.4.0 g4315520 --threads 0 remains the strict oracle for the v0.4.0 profile. Merged Python PR341 remains the profile peer for current.
Package
Windows x64 binary-only package containing a single self-contained decode.exe.
decode.exeSHA-256:73E54A37355AFEA12F2C7C35D884009A1C7AE137C613B1AC13D8EC60C9554B27- ZIP SHA-256:
6F4215A70B3EB9DE4094879C955F54C7CFBE7D1F451A8399864033EAD888FBBB
vhs-decode-dotnet-v0.4.0-1.4.5
Highlights
- Eligible direct raw
fLaC.ldf/.flacRF inputs now use the bundled libsndfile reader on native-input routes, removing FFmpeg/ffprobe process and streaming overhead from the normal path. - The native route remains narrow: it requires a complete 40 kHz mono PCM16 STREAMINFO with a known nonzero sample total. Default VHS
.flac, CVBS, Ogg/FLAC, stereo, PCM24, other rates, rejected headers, and other container routes retain the established FFmpeg/PyAV-compatible loader. - Sequential native reads remain seek-free, random reads use exact frame seeks, and PCM16 conversion retains the same
short-to-doublevalues with bounded pooled workspace. - Native open, seek, decode, CRC/body, and reported-length boundary failures retry through the established loader at the same requested sample. Clean native EOF still completes when FFmpeg is unavailable.
- The standard xUnit v3 suite and CI floor are now 1,195 tests.
Validation
- PR #92 was merged through the protected
mainbranch at0208d33b5d02104594183bf38a6aa24da47b4872. - An independent read-only local sub-agent review found four actionable compatibility/test/documentation issues across two passes. All were fixed, and the final re-review reported no actionable findings.
- Protected-main workflow run 30654159480 passed the Intel IPP native bridge, Release build, all 1,195 tests, win-x64 single-file publish, and artifact upload.
- Local Release build completed with 0 warnings and 0 errors. All 1,195 tests passed under normal hardware intrinsics, AVX2 disabled, and all hardware intrinsics disabled.
- Product A/B against Release 1.4.4 at default,
--threads 0, and--threads 20matched luma, chroma, raw JSON, stdout, normalized stderr/logs, and every orderedfileLoc. - On one scoped 100-frame/200-field, 20-worker pair from the same local RF window, wall time moved from 8.319 s to 7.345 s and sampled aggregate peak working set from 797.0 to 724.9 MiB, with identical artifacts and diagnostics. This is not a universal decoder speed claim.
- The packaged executable contains one file and passed VHS, CVBS, LD, and HiFi
--helpstartup smoke tests after extraction from the final ZIP.
Python v0.4.0 g4315520 --threads 0 remains the strict oracle for the v0.4.0 profile. Merged Python PR341 remains the profile peer for current.
Package
Windows x64 binary-only package containing a single self-contained decode.exe.
decode.exeSHA-256:7F7265C547804A7737C462DE5E7148D7496CE542399A8D21A59CFAC9D520369D- ZIP SHA-256:
EDF6A48C60C6D005EAE40764B16755D6F4F4FCA3475F11DDDE1F7C67719DBA31
vhs-decode-dotnet-v0.4.0-1.4.4
Highlights
- LD
--write-test-ldfnow writes mono 40 kHz PCM16 FLAC with the bundled libsndfile by default, avoiding an FFmpeg process on the normal path. - The upstream seeked start/end range, 1,100,000-sample lookahead, 16,384-sample bounded copy loop, PCM16 truncation, diagnostics, and output lifecycle remain unchanged.
- FFmpeg remains an automatic fallback only when the native libsndfile backend cannot load. Path, disk, write, and finalization failures are still reported instead of being hidden by a retry.
- Direct FLAC container bytes may differ from upstream's Ogg/FLAC output, but decoded PCM is sample-exact and the production
.ldfRF loader accepts both zero-offset and actual nonzero container-seek reads. - The standard xUnit v3 suite and CI floor are now 1,173 tests.
Validation
- PR #91 was merged through the protected
mainbranch atc1273f5344a4b4af9b81f3d74e693fd8ddd4c78e. - An independent read-only local sub-agent identified one product-reader integration-test gap; the follow-up closed it and final re-review reported no findings.
- The protected-main Windows Release workflow passed, including the Intel IPP native bridge, Release build, all 1,173 tests, and win-x64 single-file publish.
- Local Release build completed with 0 warnings and 0 errors; all 1,173 xUnit v3 tests passed.
- The high-offset integration gate forces the production FFmpeg/PyAV-compatible
-sspath at RF sample 40,001,003 and verifies distinct sample patterns throughRfLoaderFactory.CreateNative. - The packaged executable contains one file and passed VHS, CVBS, LD, and HiFi
--helpstartup smoke tests after extraction from the final zip.
Python v0.4.0 g4315520 --threads 0 remains the strict oracle for the v0.4.0 profile. Merged Python PR341 remains the profile peer for current.
Package
Windows x64 binary-only package containing a single self-contained decode.exe.
decode.exeSHA-256:FE9D13DA0BF6DE6F6A30DC9433804615737A903583F1B3AA3FC35E2B75F2F836- ZIP SHA-256:
DEE8A074A6F834498618750F07DC50E9339073CD5B0354F42DE9FA761B592390
vhs-decode-dotnet-v0.4.0-1.4.3
Highlights
- Specializes the Exact PocketFFT radix-8 direction outside the hot loop while preserving the pinned expression and operation order.
- Adds AVX2/SSE4.1 VHS chroma UInt16 conversion with the original finite, saturation, truncation, and scalar-tail behavior.
- Adds the verified 16-lane AVX/FMA
currentchroma burst fit and deterministic 16+16 radix narrowing forcurrentsync quantiles, with scalar and IEEE-special-value fallbacks. - Keeps worker scratch local and bounded; no cross-field state, output ordering, data type, or compatibility-visible numerical sequence moves.
- Refreshes the English, Chinese, and Japanese Python/.NET performance matrix and raises the standard xUnit v3 suite and CI floor to 1,169 tests.
On the same private local RF sample and bounded range, six balanced Exact current/20-worker pairs reduced median wall time from 9.637 to 8.627 seconds (10.48% lower, 11.71% more throughput). Four single-worker pairs reduced the median from 50.377 to 37.300 seconds (25.96% lower, 35.06% more throughput). Across two opposite-order 1,000-frame pairs, mean wall time fell from 72.405 to 62.752 seconds (13.33% lower, 15.38% more throughput). Mean integrated allocation changed by only +0.18%, candidate working set stayed below 706 MiB, and no progressive slowdown was observed.
Validation
- PR #90 was merged through the protected
mainworkflow. - An independent read-only local sub-agent reviewed all 19 changed files and found no actionable issue before merge.
- Protected-main Windows Release workflow passed at
f35fc471d0ddebbf947438d24a2366317262f69b. - Local Release build completed with 0 warnings and 0 errors.
- Standard xUnit v3 suite: 1,169 passed with native hardware, AVX2 disabled, and all hardware intrinsics disabled.
- Intel IPP native build and artifact verification passed in GitHub Actions.
- Native and scalar Exact
v0.4.0/currentgates matched luma, chroma, raw JSON, stdout, normalized stderr/logs, and orderedfileLocat serial, default-five, and 20-worker settings. - Both opposite-order 1,000-frame runs completed 2,000 fields with exact artifacts, diagnostics, and ordered
fileLoc. - All 60 final Exact/IPP-fast, profile, and worker-count matrix runs matched their profile/backend references.
- The packaged self-contained executable passed the
vhs --helpstartup smoke test.
Python v0.4.0 g4315520 --threads 0 remains the strict oracle for the v0.4.0 profile. Merged Python PR341 remains the profile peer for current.
Package
Windows x64 binary-only package containing a single self-contained decode.exe.
decode.exeSHA-256:AC4554F7B2864B87126F226EDE95A368F0927B7725B285AD74B2A59690A08221- ZIP SHA-256:
F7F7B2499185DB15448103E78594D8B7092C460D7CA670EBB147167D9B0FB851
vhs-decode-dotnet-v0.4.0-1.4.2
Highlights
- Continues the Exact performance pass with allocation- and copy-reduction work across PocketFFT, float SOS filtering, current chroma processing, field resampling, complex VHS demodulation, and RF stream decoding.
- Reuses compact VHS RF stream outputs only after decoded blocks leave every cache and active span assembly has completed; public block results retain independent ownership.
- Adds single-creation caching for immutable PocketFFT plans and VHS Hilbert multipliers while keeping mutable scratch state worker-local.
- Adds Python PR341 (
2f21e8ed) as the behavior and performance peer for.NET current; Python v0.4.0g4315520 --threads 0remains the strict v0.4.0 oracle. - Updates NetMQ to 4.0.4.3 and keeps its transitive cryptography dependency aligned with the pinned .NET 11 preview runtime.
- Raises the standard xUnit v3 suite and CI minimum-test gate to 1,141 tests.
The RF stream buffer pass reduced matched sampled managed allocation from 4.599 GB to 566.9 MB (87.67%). Across ten opposite-order 100-frame Exact current/20-worker pairs, median wall time changed from 8.72 to 8.58 seconds (1.61% lower) and mean wall time improved 1.07%. A 1,000-frame gate completed 2,000 fields with matching artifacts and diagnostics while keeping working set bounded below 711.6 MiB.
The other changes in this release remove repeated plan construction, temporary packet outputs, SOS setup storage, chroma work buffers, field-resampling destinations, and complex demodulation scratch allocations. Their individual evidence is recorded in the detailed README; no unmeasured aggregate speedup claim is made for the whole release range.
Validation
- PRs #79 through #89 were merged through the protected
mainworkflow. - An independent read-only local sub-agent review was completed before merge.
- Protected-main Windows Release workflow passed at
2f555c5bfd3fd6f8326fd15e13f5fed70cd388b9. - Local Release build completed with 0 warnings and 0 errors.
- Standard xUnit v3 suite: 1,141 passed, 0 failed, 0 skipped.
- Intel IPP native build and artifact verification passed.
- Exact
v0.4.0andcurrentgates at--threads 0, default five workers, and--threads 20matched luma, chroma, raw JSON, stdout, normalized stderr/logs, and orderedfileLocon the same private local RF sample. - The refreshed 60-run Exact/IPP-fast, profile, and worker-count matrix matched its profile/backend references.
- The packaged self-contained executable passed the
vhs --helpstartup smoke test.
Package
Windows x64 binary-only package containing a single self-contained decode.exe.
decode.exeSHA-256:91D3D9C9C1E8A8CA650F156ABDDF2A4B4F373CE1C89D06BB3C0690A357CC38CF- ZIP SHA-256:
546EA521A8C8A4146E53E32444978F7D39B88353EF08531D12E088B574EF60DD
vhs-decode-dotnet-v0.4.0-1.4.1
Highlights
- Pools the exact double-precision SOS odd-extension workspace and reuses worker-owned destinations for the VHS high-boost and sub-deemphasis SOS outputs.
- Removes one final full-buffer copy from each complex PocketFFT transform by consuming the actual final radix buffer directly.
- Preserves padding, data types, radix and packet order, per-sample arithmetic, normalization, output ordering, metadata, diagnostics, and cross-thread behavior.
- Raises the standard xUnit v3 suite and CI minimum-test gate to 1,117 tests.
The three SOS workspace passes each removed a measured full-block allocation chain. In matched 80-frame traces, sampled managed allocation changed from 10.415 to 8.659 GiB for odd-extension pooling, from 8.667 to 7.797 GiB for the high-boost destination, and from 7.797 to 6.926 GiB for the sub-deemphasis destination. Longer compatibility runs remained bounded without progressive slowdown.
The final PocketFFT pass removed the old copy's 374.725 ms Memmove trace caller. Across two opposite-order 1,000-frame pairs, combined process CPU time fell from 1,122.171 to 1,111.078 seconds (0.99%), while combined wall time was effectively unchanged at 151.782/151.650 seconds. These changes reduce allocation, GC pressure, CPU work, and memory traffic; this release does not claim a new repeatable whole-pipeline wall-time speedup.
Validation
- PRs #75 through #78 were merged through the protected
mainworkflow. - Copilot reviewed all 11 files in PR #78 and generated no comments.
- Protected-main Windows Release workflow passed at
e6bc73e3b6a008a7ef0e5b2abbca8969e95ce074. - Local Release build completed with 0 warnings and 0 errors.
- Standard xUnit v3 suite: 1,117 passed, 0 failed, 0 skipped.
- Intel IPP native build and artifact verification passed in CI.
- Exact
v0.4.0andcurrentgates at 1, default 5, and 20 workers matched luma, chroma, raw JSON, stdout, normalized stderr/logs, and orderedfileLocon the same private local 40 MHz NTSCBETAMAX_HIFIRF sample. - Six interleaved 160-frame pairs and two opposite-order 1,000-frame pairs matched all seven compatibility surfaces for the final candidate.
- The packaged self-contained executable passed the
vhs --helpstartup smoke test.
Package
Windows x64 binary-only package containing a single self-contained decode.exe.
decode.exeSHA-256:5286A4BFBFFA20280211F3E46821266891661B7DCC232D59B249D31FEEA9ECC7- ZIP SHA-256:
F1336ECA83B6D94B681F80A431CDAFEE05387199E47A028BB65957E291021A07
vhs-decode-dotnet-v0.4.0-1.4.0
Highlights
- Reuses a bounded worker-owned full-complex spectrum buffer in the VHS complex-RF path and applies the optional RF MTF multiply in place.
- Preserves the existing NumPy-compatible complex-multiply, PocketFFT/Hilbert, output ordering, metadata, diagnostic, and cross-thread behavior.
- Reduces matched 80-frame sampled managed allocation by 25.1%,
Complex[]allocation by 96.4%, and Gen2 collections by 22.8%. - Reduces 1,000-frame managed allocation by 25.46% and Gen2 collections by 43.79%.
- Raises the standard xUnit v3 suite and CI minimum-test gate to 1,115 tests.
Six order-reversed 160-frame pairs were throughput-neutral at 14.069/14.167 seconds for the baseline/candidate medians, so this release does not claim a repeatable wall-time speedup from this workspace pass. Long-run memory remained bounded without progressive slowdown; lower GC pressure can yield higher periodic resident-memory samples, so this is not a resident-memory reduction claim.
Validation
- PR #74 passed its Windows Release workflow and Copilot reviewed all 12 changed files without comments.
- Protected-main Windows Release workflow passed at
9cc673988f42845ed06c900443a6256f32b6ac85. - Local Release build completed with 0 warnings and 0 errors.
- Standard xUnit v3 suite: 1,115 passed, 0 failed, 0 skipped.
- Intel IPP native build and artifact verification passed in CI.
- Exact
v0.4.0/currentgates at 0, default 5, and 20 workers matched luma, chroma, raw JSON, stdout, normalized stderr/logs, and orderedfileLoc. - A 1,000-frame Exact
current --threads 20run matched the prior formal-release checkpoint for luma, chroma, raw JSON, normalized logs, and all 2,000 orderedfileLocvalues. - The packaged self-contained executable passed the
vhs --helpstartup smoke test.
Package
Windows x64 binary-only package containing a single self-contained decode.exe.
decode.exeSHA-256:FFBA0105F66EC8995665DF1A7BCF16A1C0621526D33BA2E9E8CF15AD448E407A- ZIP SHA-256:
FE92019B4E115D77D9B5892BCBE3652E60455F91BB8612C955866BFA512C432F
vhs-decode-dotnet-v0.4.0-1.3.9
Highlights
- Reuses worker-owned complex FFT buffers in the VHS real-FFT sub-deemphasis analytic stage.
- Preserves the existing DUCC/PocketFFT numerical path, output bytes, metadata, diagnostics, and cross-thread determinism.
- Reduces aggregate managed allocation by 21.95% and Gen2 collections by 25.76% in two opposite-order 400-frame counter pairs.
- Refreshes the fixed Python/.NET Exact/current/IPP performance matrix and raises the standard xUnit v3 suite to 1,110 tests.
The isolated v1.3.8 A/B throughput result was neutral, so this release does not claim a repeatable wall-time speedup from the workspace optimization.
Validation
- Protected-main Windows Release workflow passed at
bd8e23916583f39bd15fbc59982727327a720a3e. - Local Release build completed with 0 warnings and 0 errors.
- Standard xUnit v3 suite: 1,110 passed, 0 failed.
- Intel IPP native build and smoke passed.
- Exact v0.4.0/current gates at 0, default 5, and 20 workers matched luma, chroma, raw JSON, stdout, normalized stderr/logs, and ordered
fileLoc. - A 1,000-frame candidate run completed without progressive slowdown or unbounded working-set growth.
- The packaged single-file Exact and IPP real-capture smoke tests passed.
Package
Windows x64 binary-only package containing a single self-contained decode.exe.
decode.exeSHA-256:93DAE75BF2D1DEC2D5A8320852BFD19DFFD59EB547106765160FF938099E224D- ZIP SHA-256:
6CBAAC81B47D2FB2F31C2BDFDEB56B5C6C96CA8DFE48579CF5846A591D7CF46C
vhs-decode-dotnet-v0.4.0-1.3.8
Highlights
- Filters the decoder-owned Betamax FSC-notch video buffer in place after its previous contents are no longer needed. The public helper still returns an independent array, while notch design, padding, pooled extension, IIR arithmetic, reversal order, and copy-back behavior remain unchanged.
- Six order-reversed, interleaved 160-frame Exact
current --threads 20pairs reduced median wall time from 14.667 s to 14.495 s (1.17% lower; 1.19% higher throughput) and median CPU time from 107.227 s to 106.398 s (0.77% lower). - Matched 80-frame GC traces reduced sampled allocation from 18.245 GiB to 17.388 GiB (4.70%),
Double[]allocation from 9.690 GiB to 8.820 GiB (8.98%), and Gen2 collections from 73 to 64. - Matched 400-frame runtime counters reduced total allocation from 84.082 GiB to 79.278 GiB (5.71%) and Gen2 collections from 325 to 294. Wall time and resident-memory samples were noisy, so no long-run speed or resident-memory improvement is claimed from that pair; successive 100-frame intervals remained stable after startup.
- Refreshes the English, Simplified Chinese, and Japanese five-path performance tables for default, 1, 5, 10, and 20 workers.
Compatibility and validation
- The default
--compat-version v0.4.0contract remains pinned to upstream Python v0.4.0 commit43155200da87c0d49eb37d8ec09b1372075ee8e4, with--threads 0as the strict oracle. - Six 160-frame A/B pairs, twelve Exact profile/thread gates, and one 400-frame run matched luma, chroma, JSON, ordered
fileLoc, stdout, normalized stderr/logs, and determinism where applicable. - All 60 refreshed Exact/IPP overview-matrix runs matched their corresponding compatibility references.
- The merged
mainRelease workflow passed. The local solution built with 0 warnings and 0 errors, the Intel IPP native smoke test passed, and all 1,109 xUnit v3 tests passed. - Exact and
ipp-fastcurrentreal-capture smoke tests passed from the packaged single-file executable.
Package
vhs-decode-dotnet_win-x64-v0.4.0-1.3.8.zip is a binary-only Windows x64 package containing only decode.exe.
- ZIP SHA-256:
E839EA8F00CF6ED88650737208BF32702310C6D22983B31F21E3A03BF67969A0 decode.exeSHA-256:6364FE287A0A0B8FCFC755A88955073125450E644CECBEA7E913AD929E359206