## 1.2.1

* Fix Linux preview `Internal data stream error` (`not-negotiated`) on cameras that do not expose MJPEG, such as NV12/YUYV-only USB webcams. The MJPEG fast-path added in 1.1.7 was selected whenever its pipeline merely *parsed*, but `gst_parse_launch` succeeds even when the camera cannot produce MJPEG, so the intended raw-capture fallback never ran and initialization failed at `PLAYING`. The plugin now probes the V4L2 device (both `MJPEG` and `JPEG` pixel formats) for the target resolution before choosing the MJPEG path, and otherwise uses the always-safe raw capture path. The MJPEG pipeline pins only the resolution and lets the camera's native frame rate float, with `videorate` adapting it to the requested fps, so requesting a frame rate the camera does not expose natively in MJPEG no longer breaks negotiation. 

## 1.2.0

* Speed up Windows camera initialization by completing `initialize()` as soon as the preview starts instead of blocking until the first camera frame arrives. On a typical webcam this returns control to the app in roughly 250 ms rather than about 2 seconds. The preview fills in as frames arrive, and a watchdog reports a `cameraError` if no frames are received within 8 seconds.
* Make Windows diagnostic logging opt-in and off by default so the plugin stays quiet in your app. Set the `CAMERA_DESKTOP_LOG` environment variable to any value other than `0` to capture a trace when reporting an issue. This also removes the logging overhead that slowed camera initialization, most noticeably with a debugger or IDE attached.

## 1.1.8

* Fix Windows use-after-free crashes on camera dispose: guard the preview texture against in-flight preview samples, and defer destroying the texture until Flutter's asynchronous `UnregisterTexture` completes (its raster-thread pixel-buffer callback could otherwise run after the texture was freed) (#4)

## 1.1.7

* Fix Windows crash after camera dispose by marshalling platform channel messages to the platform thread (#4)
* Fix Linux preview `not-negotiated` error on common USB webcams (#5, thanks @jvnonce)
* Fix Linux recording on systems without `x264enc` (#5, thanks @jvnonce)
* Report max frame rate across all pixel formats during Linux device enumeration (#5, thanks @jvnonce)

## 1.1.6

* Fix Swift compiler warnings: remove unused variables in DeviceEnumerator, PhotoHandler, RecordHandler, and CameraSession

## 1.1.5

* Fix SPM integration by adding missing FlutterFramework dependency to iOS and macOS Package.swift

## 1.1.4

* Update documentation
* Remove debug logging from image stream pause/resume and video recording completion

## 1.1.3

* Fix Windows build failure (C4819 / C2220) on hosts with a non-UTF-8 system code page (e.g. CP936 on Simplified Chinese Windows) by compiling the plugin with `/utf-8` under MSVC (#2)

## 1.1.2

* Fix macOS build failure on Xcode 26+ by removing unavailable `AVCaptureSessionInterruptionReasonKey` (re-introduced in 1.1.1)
* Fix Windows build failure caused by implicit `wchar_t` to `char` conversion in debug logging

## 1.1.1

* Add comprehensive diagnostic logging across all platforms (Linux, macOS, Windows)
* Log device enumeration, backend selection, pipeline construction, resolution selection, recording lifecycle, and error paths

## 1.1.0

* Add PipeWire camera portal support for Flatpak sandbox compatibility on Linux
* Automatically detect Flatpak environment and use `pipewiresrc` instead of `v4l2src`
* Request camera access via `org.freedesktop.portal.Camera` D-Bus interface
* Enumerate PipeWire camera nodes via `GstDeviceMonitor`
* Fall back to V4L2 if portal is unavailable or user denies permission
* No new build dependencies: uses GIO (D-Bus) and GStreamer APIs already linked

## 1.0.8

* Fix macOS build failure on Xcode 26+ by removing unavailable `AVCaptureSessionInterruptionReasonKey` (iOS-only API)

## 1.0.7

* Fix camera initialization failure on Intel Macs by selecting session preset after device discovery using `device.supportsSessionPreset()` with automatic fallback (1080p → 720p → high → medium)
* Make `canAddInput`/`canAddOutput` failures return a `FlutterError` instead of silently skipping, preventing blank-screen timeouts
* Increase initialization timeout from 8s to 15s for slower USB cameras
* Subscribe to `AVCaptureSessionRuntimeError`, `WasInterrupted`, and `InterruptionEnded` notifications and forward to Dart via `cameraError`
* Fix MethodChannel image stream fallback sending hardcoded `bytesPerRow` instead of actual value from `CVPixelBuffer`
* Add diagnostic logging at all critical points in macOS session setup

## 1.0.6

* Fix Xcode build warnings by declaring PrivacyInfo.xcprivacy as a resource bundle in iOS and macOS podspecs

## 1.0.5

* Fixes #1: conflict with camera_android and camera_avfoundation dependencies

## 1.0.4

* Fix macOS Swift Package Manager compatibility

## 1.0.3

* Fix hot restart FFI crash by replacing NativeCallable with polling

## 1.0.2

* Fix macOS use-after-free crash during engine teardown by making dispose synchronous/idempotent and guarding FFI callbacks

## 1.0.1

* Fix xcprivacy build warnings by declaring resource_bundles in iOS and macOS podspecs

## 1.0.0

First stable release of `camera_desktop`

### Platform implementations

* **macOS**, AVFoundation (`AVCaptureSession`, `AVAssetWriter`). Preview via `CVPixelBuffer` textures, H.264/AAC recording, native mirror support.
* **Windows**, Media Foundation (`IMFCaptureEngine`) with Direct3D 11 texture rendering. H.264/AAC recording via `IMFSinkWriter`.
* **Linux**, GStreamer + V4L2 (`v4l2src → videoconvert → appsink` pipeline). H.264/AAC recording with automatic encoder selection, native mirror via `videoflip`.

### Features

* Live camera preview with hardware-accelerated texture rendering on all platforms
* Photo capture, video recording, and real-time image streaming
* FFI-based zero-copy frame delivery (MethodChannel fallback for compatibility)
* Configurable resolution presets, FPS (5-60), and video bitrate
* Mirror/flip control (macOS and Linux)
* Pause/resume preview
* Runtime capability querying via `getPlatformCapabilities()`

## 0.0.8

* Migrate Windows implementation to IMFCaptureEngine

## 0.0.7

* Update example app to show settings panel

## 0.0.5

* Fix C linkage on Linux

## 0.0.4

* FFI-based image stream for reduced memory copies (3→2 per frame)
* Fix macOS Swift/ObjC interop for FFI bridge
* Fix image format reporting (Linux/Windows RGBA vs macOS BGRA)

## 0.0.3

* Performance improvements

## 0.0.2

* Add setMirror API and built-in camera sorting for DeviceEnumerator

## 0.0.1

* Linux camera support via GStreamer + V4L2.
* macOS camera support via AVFoundation.
* Windows camera support via Media Foundation.
* Full `camera_platform_interface` compliance.
* Photo capture, video recording, image streaming, and live preview.
