Skip to content

[camera] Support separate resolution presets for photo and video capture #194208

Open
flutter/packages
#13206

Description

@ivan-vanyusho

Use case

The camera plugin currently uses a single ResolutionPreset for both still image capture and video recording. Some applications need high-resolution photos while recording videos at a lower resolution to reduce file size, upload time, memory usage, and encoding load.

Proposal

Allow photo capture and video recording resolution to be configured independently. For example:

final controller = CameraController(
  camera,
  ResolutionPreset.high,
  photoResolutionPreset: ResolutionPreset.max,
  videoResolutionPreset: ResolutionPreset.high,
);

The existing resolutionPreset can remain the default for both modes to preserve backward compatibility. When an optional mode-specific preset is provided, the platform implementation should apply it only to the corresponding capture pipeline:

  • photoResolutionPreset for takePicture()
  • videoResolutionPreset for startVideoRecording()

This would let applications balance still-image detail and video size/performance without rebuilding the controller or interrupting the preview.

Activity

  1. added
    in triagePresently being triaged by the triage team
    packageflutter/packages repository. See also p: labels.
    c: proposalA detailed proposal for a change to Flutter
    and removed
    in triagePresently being triaged by the triage team
    on Oct 12, 2026
  2. Mairramer commented on Oct 12, 2026

    @Mairramer
    Contributor

    Hi @ivan-vanyusho, thanks for opening this proposal!

    I looked into how we could implement separate photo and video resolution presets across the supported platforms. The main platforms seem to support this, with some limitations on the web.

    There are also two related issues worth mentioning: #46082, which requests independent resolutions for takePicture and startImageStream, and #130958.

    • Android (camera_android_camerax): CameraX uses separate ImageCapture and VideoCapture use cases, so we can configure their resolutions independently.
    • iOS (camera_avfoundation): AVCapturePhotoOutput supports high-resolution photos independently of the video configuration, so we can keep video recording at a lower resolution.
    • Windows (camera_windows): Media Foundation handles photo capture and video recording separately, so each can use its own configuration.
    • Web (camera_web): The W3C Image Capture API provides takePhoto(), which supports photo-specific settings such as width and height. However, browser support is limited. We could use this API where available and fall back to capturing a frame from the active video stream using a canvas. With that fallback, photo resolution would still depend on the video stream.
    • Android legacy (camera_android): We could handle this separately, since camera_android_camerax is now the default implementation.

    A couple of things we should also consider:

    1. Aspect ratio and field of view: Photos are often 4:3, while video presets like 720p and 1080p use 16:9. This means the photo may show a different field of view than the preview, so we should document that.
    2. Preview configuration: The preview should use videoResolutionPreset, falling back to resolutionPreset when needed. This should help avoid preview changes or interruptions when recording starts.
  3. self-assigned this
    on Oct 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

c: proposalA detailed proposal for a change to Flutterp: cameraThe camera pluginpackageflutter/packages repository. See also p: labels.team-ecosystemOwned by Ecosystem team

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions