{
  "schema": "sync-camera-research-findings-v1",
  "researchDates": [
    "2026-09-20"
  ],
  "findings": [
    {
      "cycle": "4A",
      "title": "Decoupled MediaStreamTrackProcessor Reader Ingestion",
      "finding": "Decoupling the in-page reader loop into an unbuffered intake pump (enqueuing frame references in under 5 microseconds) and an asynchronous processor completely prevents MediaStreamTrackProcessor internal buffer overflows. In the baseline harness, serializing reader.read(), frame.copyTo() (3-5 ms), and frame analysis delayed subsequent reads, overflowing Chromium's 4-frame capture buffer and inducing 332 dropped frames and 6,277 repeated frames. Decoupled intake reduces unexplained dropped frames from 332 to 0 and consecutive repeated frames from 20.90% to 1.03%."
    },
    {
      "cycle": "4B",
      "title": "Direct VideoFrame GPU Ingestion Bypass",
      "finding": "Bypassing intermediate createImageBitmap allocations and passing raw VideoFrame instances directly to WebGL2 (gl.texSubImage2D) and WebGPU (device.queue.copyExternalImageToTexture) eliminates 4-8 ms of per-frame allocation and asynchronous decode latency. Frame ingestion occurs synchronously on the render tick with zero intermediate CPU memory copies."
    },
    {
      "cycle": "4C",
      "title": "SyncCameraFrameQueue Starvation Hysteresis",
      "finding": "Replacing the abrupt zero-frame re-buffering policy (_buffering = true on single empty queue poll) with a 3-tick starvation hysteresis counter (_starvationTicks >= 3) eliminates cyclic hitching. At 60.00 Hz steady state, solitary 1-frame queue drains no longer stall rendering. Complete-second intervals below 50 FPS drop from 155 seconds to 0 seconds over 600 seconds of continuous capture."
    }
  ]
}
