# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [2.6.0] - 2026-09-16 ### Added - Added a generic control API for VideoControl units and terminals: `uvc_host_stream_find_extension_unit()`, `uvc_host_stream_find_terminal()`, `uvc_host_stream_unit_supports_control()` and `uvc_host_stream_unit_ctrl()`. An application can now drive Camera Terminal, Processing Unit and vendor Extension Unit controls without the device handle and VideoControl interface number, which are private to the driver. Extension Unit payloads are vendor-defined, so the driver cannot interpret them for the caller - it supplies the addressing and the capability check. - Added `uvc_host_stream_send_custom_request()` for vendor-specific class requests, and `uvc_host_stream_vs_ctrl()` as an escape hatch for VideoStreaming selectors this driver does not implement. - Added `uvc_host_stream_request_key_frame()`, the VideoStreaming Generate Key Frame control. It returns `ESP_ERR_NOT_SUPPORTED` without touching the bus when the camera's descriptor does not claim the control. ### Changed - `uvc_host_usb_ctrl()` now returns `ESP_ERR_NOT_SUPPORTED` when the device STALLs a control request, rather than the `ESP_ERR_INVALID_RESPONSE` it also returns for a failed transfer. ### Fixed - Fixed the control transfer size check ignoring the setup packet, which shares the 64-byte EP0 buffer with the payload. - Fixed a single EP0 transaction error breaking every later control transfer. Control transfers are now retried a few times with a yield in between. A STALL is deliberately not retried. ## [2.5.2] - 2026-09-01 ### Added - Added `CONFIG_UVC_CHECK_PAYLOAD_HEADER_ERR` option to control whether UVC payload header ERR packets discard the current frame. ### Fixed - Fixed ISOC handling so empty packets with invalid UVC payload headers do not discard the current frame. - Fixed basic UVC stream example to support MJPEG frame buffer size estimation - Fixed `uvc_host_stream_close()` aborting the whole system (`ESP_ERROR_CHECK`) when the device is stalled or disconnected; interface release failure is now logged and cleanup continues (https://github.com/espressif/esp-usb/issues/529) - Fixed isochronous frame reconstruction for cameras that never set the EOF flag in the payload header: the frame-ID toggle is now treated as the frame boundary and the frame is delivered, instead of being discarded with a `missed EoF` warning. Such a camera previously delivered no frames at all. - NULL-check VC header parse results and clamp frame-interval reads to descriptor `bLength` (BBP 573) ## [2.5.1] - 2026-05-25 ### Added - Added NV12 stream format parsing for UVC uncompressed descriptors. ### Fixed - Fixed regression from version 2.5.0 where unreasonably large URBs could be allocated, leading to out-of-memory scenarios. Now, if urb_size == 0, we allocate URB of size 4x MPS. For other urb_sizes, user's value is used to provide flexibility. - Fixed unsupported UVC formats leaking into the frame list when descriptor parsing returns an invalid format. - Fixed bulk frame reconstruction for non-conforming cameras that can send a same-frame payload header without EOF after a short data packet, as observed on some 4K and high-resolution cameras. ## [2.5.0] - 2026-04-13 ### Added - Added ESP32-S31 support ### Fixed - Fixed incorrect URB size calculation. Users can now allocate larger URBs to reduce CPU overhead. (https://github.com/espressif/esp-usb/pull/450) ## [2.4.2] - 2026-03-05 ### Fixed - Fixed incorrect selection of high-bandwidth ISOC endpoints (https://github.com/espressif/esp-usb/issues/279) ## [2.4.1] - 2025-11-27 ### Added - Added SOI check to prevent output of corrupted MJPEG frames - Added UVC payload header check ### Fixed - Moved `usb_types_uvc.h` to `private_include` directory - Fixed bulk transfer EOF handling to improve robustness - Fixed parsing of non-conforming UVC VideoStreaming descriptors where `bNumFormats` is inconsistent with actual `bFormatIndex` values (e.g., `bNumFormats=1` but format descriptors use `bFormatIndex=2`) - Fixed potential `ESP_ERR_INVALID_STATE` error when uninstalling UVC driver by always waiting for teardown completion regardless of driver state ## [2.4.0] - 2025-11-21 ### Added - Added support for user-provided frame buffers via `user_frame_buffers` field in `uvc_host_stream_config_t.advanced` - Added global suspend/resume support ### Fixed - Fixed potential buffer overflow in descriptor printing functions by removing unnecessary memcpy operations - Removed unaligned access workaround; ESP targets support unaligned memory access natively - Fixed assertion failure when receiving packets with unexpected `frame_id` ## [2.3.1] - 2025-09-24 ### Added - Added support for ESP32-H4 ## [2.3.0] - 2025-05-27 ### Added - Added `uvc_host_stream_format_get()` function that returns current stream's format - Added `uvc_host_buf_info_get()` function for esp_video binding - Added option to request default FPS by setting FPS = 0 ### Fixed - Fixed UVC driver re-installation - Fixed abort on unexpected EoF flag in bulk transfers ## [2.2.0] - 2025-04-06 ### Added - Added `uvc_host_stream_format_select()` function that allows change of format of an opened stream ### Fixed - Fixed MPS limitation on FS targets from 600 to 596 bytes - Fixed device opening procedure. Now the frame format is committed when the stream is started ## [2.1.0] - 2025-02-14 ### Added - Added support for get frame list when device is inserted - Added support for multiple cameras with USB hub ## [2.0.1] - 2025-02-04 ### Fixed - Fixed negotiation for some non-conforming UVC devices (https://github.com/espressif/esp-idf/issues/9868) ## [2.0.0] - 2025-12-19 ### Changed - New version of the driver, native to Espressif's USB Host Library - Removed libuvc dependency ## [1.0.4] - 2024-05-09 ### Added - Support printf frame based descriptor ## [1.0.3] - 2024-03-11 ### Added - Added support for ESP32-P4 - Added `libuvc_get_usb_device_info` function ### Changed - Bumped libuvc version to relax frame format negotiation ### Fixed - Fixed crash on opening non-UVC devices ## [1.0.2] - 2023-09-27 ### Changed - Updated libuvc library to 0.0.7 https://github.com/libuvc/libuvc/tree/v0.0.7 - Added Software BoM information ## [1.0.1] - 2023-04-19 ### Fixed - Fixed compatibility with IDF v4.4 ## [1.0.0] - 2022-08-22 ### Added - Initial version