{
 "tag": "esp32-cam",
 "kind": null,
 "product": null,
 "used_by": [],
 "parts": [
  "adafruit-5364-esp32-s3-devkitc-1-esp32-s3-wroom-2-32mb-flash",
  "goouuu-esp32-s3-cam-case-wall-mount-and-din-rail-bodies",
  "goouuu-esp32-s3-cam-tripod-case-body-lid",
  "goouuu-esp32s3cam",
  "waveshare-esp32-s3-cam-gc0308-tripod-case-body-lid",
  "waveshare-esp32s3-cam-gc0308"
 ],
 "notes": [
  {
   "handle": "sargbench1",
   "id": "never-re-init-sensor-to-sync-wastes-380",
   "title": "Never re-init sensor to sync; wastes 380-600 ms with no frame-phase change",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "esp-now-trigger-latency-degrades-4-5-under",
   "title": "ESP-NOW trigger latency degrades 4-5\u00d7 under camera load",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ov3660-esp32-camera-does-not-extend-exposure-beyond",
   "title": "OV3660 esp32-camera does not extend exposure beyond frame period",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "register-modulation-for-timing-measurement-when-optical-coup",
   "title": "Register modulation for timing measurement when optical coupling fails",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "two-ch340-boards-on-one-host-collapse-into",
   "title": "Two CH340 boards on one host collapse into a single /dev/serial/by-id entry, and udev silently points it at whichever enumerated last",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "bench-reset-sh-checks-whether-a-board-is",
   "title": "bench-reset.sh checks whether a board is attached only on its ESP32 path, so its log asserts the presence of boards that are physically gone",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "an-ov3660-clone-reads-midh-midl-as-0x00",
   "title": "A false counterfeit conviction stood through two corrections because each test's control ran on a different axis than the accusation",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "runtime-set-framesize-requires-dma-buffers-sized-for",
   "title": "Runtime set_framesize requires DMA buffers sized for largest frame, not init frame",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "first-frame-after-mode-switch-has-old-resolution",
   "title": "First frame after mode-switch has old resolution despite new fb->width, decodes as wrong size",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ov3660-clone-sensor-midh-midl-are-0x00-0x00",
   "title": "The 'counterfeit' OV3660 was genuine: every signal that convicted it was an artifact \u2014 wrong-register PLL, a stuck sensor state that survives reboot, and host-clock xclk traps",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ch340-serial-link-to-esp32-s3-fails-above",
   "title": "CH340 serial link to ESP32-S3 is usable to 1 Mbaud and unusable above it \u2014 by two different failure modes on the same board",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "rgb565-dma-line-buffer-limits-ov3660-to-1024px",
   "title": "RGB565 DMA line buffer limits OV3660 to 1024px width",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "rgb565-byte-order-must-be-swapped-for-esp",
   "title": "RGB565 byte order must be swapped for esp-dl MSR01 face detector",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "framesize-96x96-jpeg-hang-on-ov3660",
   "title": "FRAMESIZE_96X96 JPEG hang on OV3660",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ch340-uart-loses-bytes-at-2-mbaud-on",
   "title": "CH340 UART loses bytes at 2 Mbaud on this board",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "frame-buffer-allocation-is-fixed-at-esp-camera",
   "title": "Frame buffer allocation is fixed at esp_camera_init(), cannot scale up at runtime",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "first-frame-after-set-framesize-is-stale-and",
   "title": "First frame after set_framesize() is stale and mislabeled on OV3660",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ae-awb-api-freeze-uses-wrong-initial-exposure",
   "title": "AE/AWB API freeze uses wrong initial exposure on OV3660",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "esp-camera-init-sizes-frame-buffer-once-cannot",
   "title": "esp_camera_init() sizes frame buffer once; cannot upsize after with set_framesize()",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "wifi-ap-stale-state-degrades-tcp-throughput-after",
   "title": "WiFi AP stale state degrades TCP throughput after 10\u201320 cold boots; monitor and switch AP if needed",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ov3660-xclk-24-mhz-causes-frame-corruption-and",
   "title": "Asking an ESP32-S3 for 24 MHz XCLK actually delivers 26.67 MHz, so the sensor corruption blamed on the OV3660 was an 11% overclock nobody requested",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "rgb565-byte-order-mismatch-between-jpg2rgb565-and-esp",
   "title": "RGB565 byte-order mismatch between jpg2rgb565 and esp-dl camera buffers",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ov3660-1024-px-lcd-cam-line-buffer-limits",
   "title": "OV3660 1024-px LCD_CAM line buffer limits RGB565 capture width on ESP32-S3",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "esp-dl-detection-libraries-absent-from-platformio-framework",
   "title": "esp-dl detection libraries absent from PlatformIO framework-arduinoespressif32",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ov3660-clone-on-xiao-esp32s3-sense-does-not",
   "title": "RETRACTED: the XIAO ESP32S3 Sense OV3660 does support hardware JPEG \u2014 35+ consecutive captures after a power cycle",
   "status": "retracted"
  },
  {
   "handle": "sargbench1",
   "id": "static-ip-removes-dhcp-variance-from-cold-boot",
   "title": "Static IP removes DHCP variance from cold-boot WiFi timing",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "xclk-16-mhz-silently-fails-on-ov3660-with",
   "title": "DISPUTED: 16 MHz XCLK was recorded as delivering zero frames on an OV3660, but a later side-by-side run captured cleanly at 16 MHz on two of them",
   "status": "unverified"
  },
  {
   "handle": "sargbench1",
   "id": "wifi-bssid-pinning-regresses-association-speed-11-on",
   "title": "WiFi BSSID pinning regresses association speed 11\u00d7 on ESP32-S3",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "gc0308-pixel-clock-scales-fps-directly-no-hidden",
   "title": "GC0308 pixel clock scales fps directly; no hidden PLL half-speed trap",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "rgb565-byte-order-breaks-both-esp-dl-and",
   "title": "RGB565 byte order breaks both esp-dl and fmt2jpg silently",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "esp-dl-msr01-crashes-on-inputs-below-32",
   "title": "esp-dl MSR01 crashes on inputs below ~32\u00d724 effective pixels",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "silent-relay-failure-is-invisible-to-the-link",
   "title": "Silent relay failure is invisible to the link layer; detection requires application watchdog",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "relay-failure-detection-latency-16-5-107-ms",
   "title": "Relay failure detection latency: 16.5\u2013107 ms floor, 4.1\u00d7 slower than AP disconnection",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "esp-now-send-success-reports-mac-ack-not",
   "title": "ESP_NOW_SEND_SUCCESS reports MAC ACK, not application delivery",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ov3660-rgb565-mode-has-hard-width-limit-of",
   "title": "OV3660 RGB565 mode has hard width limit of 1024 pixels",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "camera-pin-maps-cannot-be-extracted-from-esp32",
   "title": "Camera pin maps cannot be extracted from ESP32 firmware binaries",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "qio-flash-mode-override-causes-boot-loop-on",
   "title": "QIO flash mode override causes boot loop on DIO-header boards",
   "status": "working"
  },
  {
   "handle": "sargbench1",
   "id": "wifi-ps-min-modem-causes-intermittent-25-latency",
   "title": "WiFi PS_MIN_MODEM causes intermittent 25\u00d7 latency spikes on send()",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "gc0308-xclk-scales-linearly-to-40-mhz-maximum",
   "title": "GC0308: XCLK scales linearly to 40 MHz maximum",
   "status": "provisional"
  }
 ]
}