The INdiInterop.CreateSender(frameRateN, frameRateD) overload landed without
either implementation, so main stopped compiling on Windows (CS0535) and a
tag push would have failed the release build. The NDI SDK carries frame rate
per-frame, not on send_create: the handle now remembers the configured
rational and SendFrame stamps it onto every outgoing frame instead of the
hardwired 60000/1001. Frame assembly is extracted to a pure BuildVideoFrame
so the stamping is unit-testable without an NDI runtime.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Additive, backwards-compatible test-double extensions so the discovery
rebuild failure path is observable:
- CreateFinderHook: optional callback invoked on every CreateFinder,
letting a test throw on the Nth call to simulate a runtime that
refuses to build a replacement finder.
- FinderCreatedCount: how many finders were built.
- The fake find handle now flips a Disposed flag, and GetCurrentSources
throws ObjectDisposedException if asked to read a disposed finder —
so a regression that polls a retired finder fails loudly instead of
silently passing (the fake previously ignored the handle entirely).
Default behavior is unchanged when CreateFinderHook is null.