Commit graph

48 commits

Author SHA1 Message Date
d14a33a0a3 fix(ndi): resolve Processing.NDI.Lib.x64 via NDI_RUNTIME_DIR_V6 env var
The NDI 6 installer sets NDI_RUNTIME_DIR_V6 (and V5/V4 for back-compat) but does not always add the runtime directory to PATH, so a default DllImport(Processing.NDI.Lib.x64) failed with 0x8007007E (DllNotFoundException) on otherwise correctly installed machines, killing both TeamsISO.exe and TeamsISO.Console at preflight.

Add NdiNativeLibraryResolver, registered from NdiNative's static ctor, that resolves the DLL by trying NDI_RUNTIME_DIR_V6 / V5 / V4 in order, NativeLibrary.Load-ing the file from disk before the runtime falls back to its default search algorithm. Static-ctor registration (rather than [ModuleInitializer]) sidesteps CA2255 under TreatWarningsAsErrors and still guarantees the resolver is in place before the first P/Invoke fires.
2026-05-07 15:14:54 -04:00
0f03c272ad fix(build): use forward-slash paths in TeamsISO.sln so Windows .slnf resolves
MSBuild on Windows compares solution-filter project paths against .sln entries as raw strings, so the forward-slash entries in TeamsISO.Windows.slnf / TeamsISO.Linux.slnf were being rejected (MSB5028) against the .sln's backslash entries. Linux dotnet normalizes separators so CI happened to be green. Switch the .sln to forward slashes so both platforms agree; Visual Studio accepts either form.
2026-05-07 15:14:42 -04:00
e3321ff279 feat(ui): wire DI bootstrap in App.xaml.cs and add Windows solution filter
Some checks failed
CI / build-and-test (push) Failing after 36s
2026-05-07 15:41:58 +00:00
d64b110550 feat(ui): add MainWindow XAML with participants DataGrid, settings sidebar, alert banner
Some checks failed
CI / build-and-test (push) Failing after 34s
2026-05-07 15:40:49 +00:00
8c441318d8 feat(ui): add MainViewModel with live participants collection and dispatcher marshalling
Some checks failed
CI / build-and-test (push) Failing after 34s
2026-05-07 15:40:06 +00:00
fbb73bcf04 feat(ui): add MVVM helpers and per-component view models (Participant, GlobalSettings, AlertBanner)
Some checks failed
CI / build-and-test (push) Has been cancelled
2026-05-07 15:39:46 +00:00
2c6fbdf861 docs: add Phase C WPF UI plan
Some checks failed
CI / build-and-test (push) Failing after 32s
2026-05-07 15:38:57 +00:00
c6f23e1885 docs: update plan backlog after Phase B-2 completion
Some checks failed
CI / build-and-test (push) Failing after 32s
2026-05-07 15:38:24 +00:00
368920734d fix(console): disambiguate System.Console from TeamsISO.Console namespace
Some checks failed
CI / build-and-test (push) Has been cancelled
2026-05-07 15:38:02 +00:00
b2dafb7aed feat(console): add TeamsISO.Console headless smoke runner
Some checks failed
CI / build-and-test (push) Has been cancelled
2026-05-07 15:37:44 +00:00
88841780af feat(pipeline): add managed BGRA nearest-neighbor scaler with aspect modes
Some checks failed
CI / build-and-test (push) Failing after 27s
2026-05-07 15:37:07 +00:00
af37b4d9e1 refactor(interop): NdiRuntimeProbe now matches by prefix to handle NDI runtime version strings
Some checks failed
CI / build-and-test (push) Failing after 24s
2026-05-07 15:36:26 +00:00
da5818b690 feat(interop): add NdiInteropPInvoke production INdiInterop implementation
Some checks failed
CI / build-and-test (push) Failing after 26s
2026-05-07 15:35:59 +00:00
90b0951a42 fix(interop): rename create-settings structs to avoid name collision with P/Invoke methods
Some checks failed
CI / build-and-test (push) Failing after 26s
2026-05-07 15:35:15 +00:00
6f09ca35ef feat(interop): add NDI 6 native bindings, handle types, and version constants
Some checks failed
CI / build-and-test (push) Has been cancelled
2026-05-07 15:34:54 +00:00
60b12eb637 docs: add Phase B-2 NDI interop plan
Some checks failed
CI / build-and-test (push) Failing after 27s
2026-05-07 15:34:11 +00:00
54cb4ac3d4 docs: update plan backlog after Phase B-1 completion
Some checks failed
CI / build-and-test (push) Failing after 30s
2026-05-07 15:28:52 +00:00
cd5e852a30 feat(controller): add IIsoController and IsoController implementation
Some checks failed
CI / build-and-test (push) Has been cancelled
2026-05-07 15:28:27 +00:00
49b6dfb9ed feat(pipeline): add IsoPipeline with lifecycle and restart supervisor
Some checks failed
CI / build-and-test (push) Failing after 29s
2026-05-07 15:26:54 +00:00
e318514202 feat(interop): add NdiRuntimeProbe with version-mismatch result
Some checks failed
CI / build-and-test (push) Failing after 27s
2026-05-07 15:24:31 +00:00
798a5abd64 feat(pipeline): add ExponentialBackoff policy
Some checks failed
CI / build-and-test (push) Has been cancelled
2026-05-07 15:24:13 +00:00
aecbda674d feat(pipeline): add NdiSender with channel-based input
Some checks failed
CI / build-and-test (push) Has been cancelled
2026-05-07 15:23:51 +00:00
ead5e79935 feat(pipeline): add NdiReceiver with channel-based output
Some checks failed
CI / build-and-test (push) Has been cancelled
2026-05-07 15:23:26 +00:00
f1513ddaf5 docs: add Phase B-1 pipeline-orchestration plan
Some checks failed
CI / build-and-test (push) Failing after 25s
2026-05-07 15:22:56 +00:00
38f7db888e feat(domain): default global framerate to 59.94p (user's primary production target)
Some checks failed
CI / build-and-test (push) Failing after 25s
2026-05-07 15:21:58 +00:00
381cac66e6 docs: add Phase A test playbook stub and plan backlog
Some checks failed
CI / build-and-test (push) Failing after 26s
2026-05-07 15:16:37 +00:00
27dc0f90c7 feat(logging): add EngineLogging.CreateConsole helper
Some checks failed
CI / build-and-test (push) Has been cancelled
2026-05-07 15:16:17 +00:00
f2b4e881e4 ci: enforce 80% line coverage gate on TeamsISO.Engine
Some checks failed
CI / build-and-test (push) Has been cancelled
2026-05-07 15:16:11 +00:00
5c039025fd feat(pipeline): add FrameProcessor with closest-frame timing and slate fallback
Some checks failed
CI / build-and-test (push) Failing after 24s
2026-05-07 15:15:19 +00:00
970f04861d feat(pipeline): add SolidFrameRenderer slate and IFrameScaler/PassthroughFrameScaler
Some checks failed
CI / build-and-test (push) Failing after 25s
2026-05-07 15:14:37 +00:00
1b280e3e77 feat(discovery): add NdiDiscoveryService with diff-based event emission
Some checks failed
CI / build-and-test (push) Failing after 22s
2026-05-07 15:14:15 +00:00
cef9018b6d feat(discovery): add ParticipantTracker with rename heuristic
Some checks failed
CI / build-and-test (push) Failing after 22s
2026-05-07 15:13:42 +00:00
c07a668672 test(fakes): add FakeNdiInterop and FakeFrameClock; feat(discovery): add DiscoveryEvent
Some checks failed
CI / build-and-test (push) Failing after 24s
2026-05-07 15:13:00 +00:00
f562303b47 feat(pipeline,interop): add RawFrame, ProcessedFrame, IFrameClock and INdiInterop test seam
Some checks failed
CI / build-and-test (push) Has been cancelled
2026-05-07 15:12:36 +00:00
3f8b5f1a7b feat(persistence): add ConfigStore with atomic JSON writes and corruption-safe load
Some checks failed
CI / build-and-test (push) Failing after 22s
2026-05-07 15:12:01 +00:00
464f559576 feat(domain): add Participant, IsoAssignment, IsoOutput, IsoHealthStats, FrameProcessingSettings, EngineConfig, EngineAlert
Some checks failed
CI / build-and-test (push) Failing after 22s
2026-05-07 15:11:32 +00:00
aaf3184a8e feat(discovery): add NdiSource record and Teams source string parser
Some checks failed
CI / build-and-test (push) Failing after 22s
2026-05-07 15:11:00 +00:00
b07e3e78e0 feat(domain): add core enums (NdiSourceKind, IsoState, AspectMode, AudioMode, TargetFramerate, TargetResolution)
Some checks failed
CI / build-and-test (push) Failing after 23s
2026-05-07 15:10:29 +00:00
5ac0a50afe ci: add Forgejo Actions build-and-test workflow
Some checks failed
CI / build-and-test (push) Has been cancelled
2026-05-07 15:10:08 +00:00
f21e818b28 chore: scaffold WPF app and integration test projects
- TeamsISO.App: hand-rolled net8.0-windows WPF csproj since the WPF
  template isn't shipped on linux-arm64 .NET SDK; UI is a placeholder
  for Phase C.
- TeamsISO.Engine.IntegrationTests: cross-platform xunit project with a
  skipped scaffold fact tagged [Trait("requires", "ndi")] for Phase B.
- TeamsISO.Linux.slnf: solution filter for non-Windows CI that excludes
  the WPF project (which can only build on Windows).
2026-05-07 15:09:56 +00:00
d0f05263af test(engine): scaffold TeamsISO.Engine.Tests xUnit project 2026-05-07 15:08:38 +00:00
14cbc25b99 feat(interop): scaffold TeamsISO.Engine.NdiInterop project 2026-05-07 15:08:21 +00:00
f9ab6fe0e7 feat(engine): scaffold TeamsISO.Engine class library 2026-05-07 15:08:11 +00:00
c355e9dc4c chore: add empty TeamsISO solution 2026-05-07 15:07:58 +00:00
87425b509b chore: scaffold repo conventions and global build props 2026-05-07 15:07:53 +00:00
a5a0f9ae37 docs: add Phase A engine-foundation implementation plan 2026-05-07 15:07:12 +00:00
8bd840391e docs: add v1.0 implementation spec 2026-05-07 10:37:49 -04:00
8d02221b11 Initial commit 2026-05-07 10:22:03 -04:00