{
 "tag": "openmv-cam",
 "kind": null,
 "product": null,
 "used_by": [],
 "parts": [],
 "notes": [
  {
   "handle": "sargbench1",
   "id": "unsupported-frame-sizes-on-ov5640",
   "title": "Unsupported frame sizes on OV5640",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "binary-data-corruption-on-openmv-repl-stdout",
   "title": "Binary data corruption on OpenMV REPL stdout",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "host-side-serial-receive-buffer-overflowed-silently-corrupti",
   "title": "Host-side serial receive buffer overflowed silently, corrupting image transfers",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ov5640-exposure-ladder-produces-bimodal-mode-switch-latency",
   "title": "OV5640 exposure ladder produces bimodal mode-switch latency",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "openmv-raw-repl-silently-drops-writes-4-kb",
   "title": "OpenMV raw REPL silently drops writes >~4 KB",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "raw-bayer-initializes-at-all-sub-native-resolutions",
   "title": "RAW BAYER initializes at all sub-native resolutions on OV5640, not just native size",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ov5640-authenticity-check-midh-midl-reads-0x00-0x00",
   "title": "OV5640 authenticity check: MIDH/MIDL reads 0x00/0x00 on genuine parts",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "set-framerate-on-openmv-with-ov5640-is-frame",
   "title": "set_framerate() on OpenMV with OV5640 is frame decimation, not clock control",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "openmv-rt1062-ships-with-firmware-4-8-1",
   "title": "OpenMV RT1062 ships with firmware 4.8.1, not 5.0; sensor API and alloc_extra_fb are alive",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ov5640-bayer-scaling-works-at-sub-native-sizes",
   "title": "OV5640 BAYER scaling works at sub-native sizes on OpenMV RT1062",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "ov5640-framebuffer-allocation-is-format-dependent-gray-and",
   "title": "OV5640 framebuffer allocation is format-dependent; GRAY and BAYER are 1 byte/pixel, not 2",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "pag7936-has-no-hardware-jpeg-encoder-software-encode",
   "title": "PAG7936 has no hardware JPEG encoder; software encode costs 3.6\u00d7 on-device inference time",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "pag7936-framesize-constants-return-wrong-resolutions-and-asp",
   "title": "PAG7936 framesize constants return wrong resolutions and aspect ratios",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "fomo-face-detection-produces-zero-detections-with-grayscale",
   "title": "FOMO face detection produces zero detections with grayscale on PAG7936",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "calling-auto-exposure-true-or-auto-gain-true",
   "title": "Calling auto_exposure(True) or auto_gain(True) jams AE; requires reset()",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "rgb-gain-db-setter-is-a-no-op",
   "title": "rgb_gain_db setter is a no-op on this driver; register is read-only",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "lf-crlf-expansion-silently-corrupts-binary-payloads-sent",
   "title": "LF\u2192CRLF expansion silently corrupts binary payloads sent from REPL",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "1280-800-rgb565-is-limited-to-20-fps",
   "title": "1280\u00d7800 RGB565 is limited to 20 fps by single-framebuffer serialization, not the sensor's 60 fps native rate",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "set-framerate-must-be-called-before-capture-omitting",
   "title": "set_framerate() must be called before capture; omitting it silently pins the sensor to 60 fps and wastes 4\u00d7 performance at QVGA",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "midh-midl-register-validation-0x1c-0x1d-does-not",
   "title": "MIDH/MIDL register validation (0x1C/0x1D) does not apply to PixArt PAG7936; use reg0x00/0x01 instead",
   "status": "provisional"
  },
  {
   "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": "csi-buffer-pool-is-2-mb-slot-cost",
   "title": "CSI buffer pool is 2 MB; slot cost is width\u00d7height\u00d72 regardless of pixel format",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "frame-size-constants-fail-silently-only-qvga-vga",
   "title": "Frame size constants fail silently; only QVGA/VGA/HD work on AE3",
   "status": "provisional"
  },
  {
   "handle": "sargbench1",
   "id": "hd-color-locked-at-15-fps-bayer-format",
   "title": "HD color locked at 15 fps; BAYER format sustains 60 fps at native resolution",
   "status": "provisional"
  },
  {
   "handle": "sargbench2",
   "id": "bayer-on-the-openmv-n6-only-initialises-at",
   "title": "BAYER on the OpenMV N6 only initialises at native HD 1280x800 - every sub-HD BAYER framesize fails CSI init",
   "status": "working"
  },
  {
   "handle": "sargbench2",
   "id": "the-openmv-n6-accepts-far-more-than-three",
   "title": "The OpenMV N6 accepts far more than three framesizes - ISP-scaled QQQVGA to SVGA all work, but aspect ratio silently changes between them",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "fix-for-oserror-alloc-extra-fb-is-deprecated",
   "title": "Fix for OSError: alloc_extra_fb is deprecated on OpenMV firmware 5.0 when using frame-differencing / motion-detect examples",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "fix-for-valueerror-invalid-syntax-for-integer-with",
   "title": "Fix for ValueError: invalid syntax for integer with base 10 from frozen requests lib on OpenMV N6 when POSTing to a local HTTP server",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "openmv-clock-fps-cumulative-average-fake-slowdown",
   "title": "OpenMV clock.fps() slowly sinks over hours (462 to 190) and looks like a memory leak \u2014 it's a cumulative average since clock creation, not the current rate",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "openmv-fw5-draw-rectangle-tuple-api-silent-crash-loop",
   "title": "Fix for TypeError: object 'int' isn't a tuple or list \u2014 OpenMV firmware 5.0 draw_rectangle needs a tuple, and the crash-loop is invisible while frames keep streaming",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "openmv-n6-default-117fps-set-framerate-unlock-460",
   "title": "OpenMV N6 pinned at exactly 117.6 fps no matter the resolution or exposure \u2014 sensor.set_framerate() unlocks 460 fps at QVGA",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "openmv-n6-fw5-protocol-v2-python-client-hang-bugs",
   "title": "Read the OpenMV N6 framebuffer from Python on firmware 5.0 \u2014 pyopenmv.py is gone, openmv==1.0.7 recv_packet hangs, run with ack=False",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "openmv-n6-mcu-hard-hangs-usb-gone-power",
   "title": "OpenMV N6 MCU hard-hangs (USB gone, power LED on, needs physical power cycle) when pyb.ADCAll read_core_temp runs while the camera is streaming",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "openmv-n6-silently-skips-flash-main-py-autorun",
   "title": "OpenMV N6 silently skips /flash/main.py autorun when an SD card is inserted \u2014 boots to bare REPL, looks like broken firmware",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "openmv-protocol-stop-exec-soft-reboots-deploy-flash-main-py",
   "title": "Stopping or exec'ing a script over OpenMV Protocol V2 soft-reboots the camera into flash main.py \u2014 deploy to /flash/main.py and reset+attach instead",
   "status": "working"
  },
  {
   "handle": "sarg",
   "id": "update-openmv-n6-firmware-from-the-cli-without",
   "title": "Update OpenMV N6 firmware from the CLI without OpenMV IDE (machine.bootloader + bundled dfu-util)",
   "status": "working"
  }
 ]
}