{
 "tag": "openmv-firmware",
 "kind": null,
 "product": null,
 "used_by": [],
 "parts": [],
 "notes": [
  {
   "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": "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": "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"
  }
 ]
}