using Windows.Media.MediaProperties; using Xunit; using ytLive.Services; namespace ytLive.Tests; /// /// Take-2026-09-15 fix: a camera that another app has left in MJPG mode can't be /// read as Bgra8 by a MediaFrameReader (StartAsync answers OutputFormatNotSupported) — /// exactly what a browser grabbing the webcam causes. The reader-subtype ladder in /// MediaCaptureFrameSource picks an output the source can actually produce; these /// tests lock the ordering so the fix can't regress into the silent empty webcam box. /// public sealed class MediaCaptureFrameSourceTests { [Fact] public void ReaderSubtypeCandidates_MjpgActive_NeverAsksBgra8() { var candidates = MediaCaptureFrameSource.ReaderSubtypeCandidates("MJPG"); Assert.DoesNotContain(candidates, s => s == MediaEncodingSubtypes.Bgra8); Assert.Equal(MediaEncodingSubtypes.Nv12, candidates[0]); Assert.Null(candidates[^1]); } [Fact] public void ReaderSubtypeCandidates_MjpgActive_IsCaseInsensitive() { var candidates = MediaCaptureFrameSource.ReaderSubtypeCandidates("mjpg"); Assert.Equal(MediaEncodingSubtypes.Nv12, candidates[0]); Assert.DoesNotContain(candidates, s => s == MediaEncodingSubtypes.Bgra8); } [Fact] public void ReaderSubtypeCandidates_UncompressedActive_KeepsBgra8FastPath() { var yuy2 = MediaCaptureFrameSource.ReaderSubtypeCandidates("YUY2"); var nv12 = MediaCaptureFrameSource.ReaderSubtypeCandidates("NV12"); Assert.Equal(MediaEncodingSubtypes.Bgra8, yuy2[0]); Assert.Equal(MediaEncodingSubtypes.Bgra8, nv12[0]); } [Fact] public void ReaderSubtypeCandidates_UnknownActive_DefaultsToBgra8() { Assert.Equal(MediaEncodingSubtypes.Bgra8, MediaCaptureFrameSource.ReaderSubtypeCandidates(null)[0]); Assert.Equal(MediaEncodingSubtypes.Bgra8, MediaCaptureFrameSource.ReaderSubtypeCandidates("")[0]); } }