{
  "schema": "sync-camera-research-findings-v1",
  "researchDates": [
    "2026-09-18"
  ],
  "findings": [
    {
      "cycle": "A",
      "title": "Windows Media Foundation Virtual Camera In-Process COM Architecture",
      "finding": "Windows Media Foundation virtual cameras require an in-process COM server (SyncCamera.dll) implementing IMFActivate, IMFMediaSourceEx, and IMFMediaStream2 hosted directly within the Windows Camera Frame Server service (FSCS.exe). Registering the CLSID as an activator rather than the source directly is mandatory; returning the source from IClassFactory::CreateInstance causes IMFVirtualCamera::Start to fail with E_NOINTERFACE. Furthermore, the source must publish a sensor profile collection declaring KSCAMERAPROFILE_Legacy (<=30 fps) and KSCAMERAPROFILE_HighFrameRate (>=60 fps) alongside stream category PINNAME_VIDEO_CAPTURE and MF_DEVICESTREAM_FRAMESERVER_SHARED to allow multi-client frame server multiplexing."
    },
    {
      "cycle": "B",
      "title": "Kernel Streaming Proxy DirectShow Bridging for Virtual Media Sources",
      "finding": "In Windows 11 (build 22000+), the Windows Camera Frame Server automatically exposes registered Media Foundation virtual cameras to legacy DirectShow applications through the Kernel Streaming proxy filter (ksproxy.ax / vfwvdctl.dll). The virtual camera appears under CLSID_VideoInputDeviceCategory as 'Sync Camera'. DirectShow pin media type negotiation translates MFVideoFormat_NV12 to MEDIASUBTYPE_NV12 and MFVideoFormat_RGB32 to MEDIASUBTYPE_RGB32, enabling seamless zero-code integration with legacy video capture software (OBS Studio DirectShow source, TouchDesigner Video Device In, OpenCV VideoCapture, and desktop Zoom/Teams) without requiring a deprecated DirectShow BaseClasses capture filter."
    },
    {
      "cycle": "C",
      "title": "Dual Format Negotiation and Fixed-Point BT.709 NV12 Color Pipeline",
      "finding": "SyncCameraStream advertises two media types at 1920x1080@60fps: preferred format 0 is MFVideoFormat_NV12 with studio range (Y: 16-235, UV: 16-240) and explicit MF_MT_YUV_MATRIX=MFVideoTransferMatrix_BT709, and format 1 is MFVideoFormat_RGB32 (nominal range 0-255). Format conversion from BGRA to NV12 is performed in-process using fixed-point 16.16 integer matrix arithmetic with 2x2 box-filtered chroma subsampling. When frame dimensions match 1920x1080 exactly, an exact-size copy bypasses the fractional resampler, eliminating pixel center offset blur and preserving sharp high-frequency graphics."
    },
    {
      "cycle": "D",
      "title": "Lock-Free Shared Memory Ring Buffer with Bi-Directional Demand Heartbeat",
      "finding": "Inter-process frame handoff between the unprivileged publisher daemon (syncd.exe) and the Local Service frame server (SyncCamera.dll) operates over a 3-slot lock-free circular memory-mapped section (Local\\io.noisefactor.sync.camera.frame.v1). To prevent daemon CPU waste when no capture clients are active, the media source stamps an atomic 64-bit microsecond demand timestamp (record_demand) on every RequestSample invocation. If no demand is recorded within a 1,000,000 us (1.0 s) window, the daemon suspends frame conversion and ring publishing, mimicking the power-saving backpressure behavior of the macOS CMIO extension."
    },
    {
      "cycle": "E",
      "title": "WASAPI Audio Input Architecture and Physical Runner Qualification Constraints",
      "finding": "The Windows native audio backend utilizes WASAPI via RtAudio 6.0.1, supporting 1 to 32 discrete channels at standard sampling rates (48 kHz). Devices are enumerated via IMMDeviceEnumerator::EnumAudioEndpoints(eCapture, DEVICE_STATE_ACTIVE) and assigned persistent SHA-256 identifiers. In CI on the self-hosted physical Windows runner, audio inventory returns 0 active sources because the physical machine has no microphone or line-in jack connected. End-to-end multi-channel WASAPI capture qualification requires connecting a physical multi-channel USB interface (such as the Arturia AudioFuse 8Pre) or installing a virtual loopback capture endpoint."
    }
  ]
}
