{
  "schema": "sync-camera-research-findings-v1",
  "researchDates": [
    "2026-09-18"
  ],
  "findings": [
    {
      "cycle": "A",
      "title": "Elimination of Single-Thread Event Loop Starvation Under 1080p60 Video Load",
      "finding": "In the baseline daemon architecture, TestPublisher::publish executed a scalar byte-by-byte FNV-1 checksum across 8,294,400 bytes on every 1080p frame on the primary libuv event loop thread. This synchronous loop blocked the event loop for 15.1 ms per frame (over 90% of the 16.67 ms frame budget). Concurrently arriving audio capture requests were starved of event loop turns, causing read RTT to expand from 0.5 ms to 35-64 ms and driving audio capture ring buffer overflow (>160,000 dropped audio samples per 5 s). Limiting exhaustive hashing to frames <= 1 MB and sampling 64 KB headers for 8.3 MB video frames eliminated the 15.1 ms block entirely."
    },
    {
      "cycle": "B",
      "title": "NEON SIMD Vectorization of WebSocket Client Frame Unmasking",
      "finding": "RFC 6455 requires client-to-server WebSocket frames to be masked with a 4-byte rotating XOR key. The baseline implementation in websocket.cpp unmasked payloads 4 bytes at a time in a scalar 32-bit loop, consuming 2.0 ms per 8.29 MB 1080p frame. Implementing 64-byte vector unmasking using ARM NEON SIMD intrinsics (uint8x16_t, veorq_u8) reduced unmasking execution time from 2.0 ms to 0.18 ms (a 10.9x speedup), returning 1.82 ms of event loop budget to concurrent multiplexed I/O."
    },
    {
      "cycle": "C",
      "title": "Audio Ring Buffer Mutex Hold Reduction and Serialization Vectorization",
      "finding": "CaptureBuffer::read() in audio_capture.cpp originally allocated memory and copied audio float samples element-by-element while holding the buffer mutex, holding the lock for ~10 us and causing lock contention with high-frequency 5 ms hardware audio callbacks. Preallocating packet sample storage before acquiring the lock and replacing element loops with std::memcpy reduced mutex hold time to ~30 ns. Additionally, replacing 61,440 scalar per-byte shift calls in encode_packet() with direct std::memcpy on little-endian hardware reduced audio packet serialization walltime from 180 us to 4 us."
    },
    {
      "cycle": "D",
      "title": "Zero-Drop Concurrent 32-Channel Audio and 1080p60 Video Qualification",
      "finding": "In a 30-minute continuous qualification soak under concurrent 32-channel float32 audio capture (48 kHz, 1,536,000 samples/sec) and uncompressed 1080p60 video ingestion (497.7 MB/sec, 3.98 Gbps), the optimized daemon sustained exactly 0 audio sample drops, 0 cursor discontinuities, and nominal 59.8+ delivered video FPS with 0 low-rate intervals (<50 FPS). Resident memory footprint stabilized at ~12.5 MB (matching the 8.3 MB frame buffer pool plus audio ring buffers) with zero memory drift over the 30-minute endurance window."
    }
  ]
}
