twonly-app-dependencies/camera_avfoundation/pigeons/messages.dart
2026-10-07 22:18:23 +02:00

375 lines
10 KiB
Dart

// Copyright 2013 The Flutter Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:pigeon/pigeon.dart';
@ConfigurePigeon(
PigeonOptions(
dartOut: 'lib/src/messages.g.dart',
swiftOut: 'darwin/camera_avfoundation/Sources/camera_avfoundation/Messages.swift',
copyrightHeader: 'pigeons/copyright.txt',
),
)
// Pigeon version of CameraLensDirection.
enum PlatformCameraLensDirection {
/// Front facing camera (a user looking at the screen is seen by the camera).
front,
/// Back facing camera (a user looking at the screen is not seen by the camera).
back,
/// External camera which may not be mounted to the device.
external,
}
// Pigeon version of CameraLensDirection.
enum PlatformCameraLensType {
/// A built-in wide-angle camera device type.
wide,
/// A built-in camera device type with a longer focal length than a wide-angle camera.
telephoto,
/// A built-in camera device type with a shorter focal length than a wide-angle camera.
ultraWide,
/// Unknown camera device type.
unknown,
}
// Pigeon version of DeviceOrientation.
enum PlatformDeviceOrientation { portraitUp, landscapeLeft, portraitDown, landscapeRight }
// Pigeon version of ExposureMode.
enum PlatformExposureMode { auto, locked }
// Pigeon version of FlashMode.
enum PlatformFlashMode { off, auto, always, torch }
// Pigeon version of FocusMode.
enum PlatformFocusMode { auto, locked }
/// Pigeon version of ImageFileFormat.
enum PlatformImageFileFormat { jpeg, heif }
// Pigeon version of the subset of ImageFormatGroup supported on iOS.
enum PlatformImageFormatGroup { bgra8888, yuv420 }
// Pigeon version of ResolutionPreset.
enum PlatformResolutionPreset { low, medium, high, veryHigh, ultraHigh, max }
enum PlatformVideoStabilizationMode { off, standard, cinematic, cinematicExtended }
// Pigeon version of CameraDescription.
class PlatformCameraDescription {
PlatformCameraDescription({
required this.name,
required this.lensDirection,
required this.lensType,
});
/// The name of the camera device.
final String name;
/// The direction the camera is facing.
final PlatformCameraLensDirection lensDirection;
/// The type of the camera lens.
final PlatformCameraLensType lensType;
}
// Pigeon version of the data needed for a CameraInitializedEvent.
class PlatformCameraState {
PlatformCameraState({
required this.previewSize,
required this.exposureMode,
required this.focusMode,
required this.exposurePointSupported,
required this.focusPointSupported,
});
/// The size of the preview, in pixels.
final PlatformSize previewSize;
/// The default exposure mode
final PlatformExposureMode exposureMode;
/// The default focus mode
final PlatformFocusMode focusMode;
/// Whether setting exposure points is supported.
final bool exposurePointSupported;
/// Whether setting focus points is supported.
final bool focusPointSupported;
}
// Pigeon version of the data needed for a CameraImageData.
class PlatformCameraImageData {
PlatformCameraImageData({
required this.formatCode,
required this.width,
required this.height,
required this.planes,
required this.lensAperture,
required this.sensorExposureTimeNanoseconds,
required this.sensorSensitivity,
});
/// The FourCharCode of the image format.
final int formatCode;
final int width;
final int height;
final List<PlatformCameraImagePlane> planes;
final double lensAperture;
final int sensorExposureTimeNanoseconds;
final double sensorSensitivity;
}
// Pigeon version of the data needed for a CameraImagePlane.
class PlatformCameraImagePlane {
const PlatformCameraImagePlane({
required this.bytes,
required this.bytesPerRow,
required this.width,
required this.height,
});
final Uint8List bytes;
final int bytesPerRow;
final int width;
final int height;
}
// Pigeon version of to MediaSettings.
class PlatformMediaSettings {
PlatformMediaSettings({
required this.resolutionPreset,
required this.framesPerSecond,
required this.videoBitrate,
required this.audioBitrate,
required this.enableAudio,
});
final PlatformResolutionPreset resolutionPreset;
final int? framesPerSecond;
final int? videoBitrate;
final int? audioBitrate;
final bool enableAudio;
}
// Pigeon equivalent of CGPoint.
class PlatformPoint {
PlatformPoint({required this.x, required this.y});
final double x;
final double y;
}
// Pigeon equivalent of CGSize.
class PlatformSize {
PlatformSize({required this.width, required this.height});
final double width;
final double height;
}
@HostApi()
abstract class CameraApi {
/// Returns the list of available cameras.
@async
@ObjCSelector('availableCamerasWithCompletion')
List<PlatformCameraDescription> getAvailableCameras();
/// Create a new camera with the given settings, and returns its ID.
@async
@ObjCSelector('createCameraWithName:settings:')
int create(String cameraName, PlatformMediaSettings settings);
/// Initializes the camera with the given ID.
@async
@ObjCSelector('initializeCamera:withImageFormat:')
void initialize(int cameraId, PlatformImageFormatGroup imageFormat);
/// Begins streaming frames from the camera.
@async
void startImageStream();
/// Stops streaming frames from the camera.
@async
void stopImageStream();
/// Called by the Dart side of the plugin when it has received the last image
/// frame sent.
///
/// This is used to throttle sending frames across the channel.
@async
void receivedImageStreamData();
/// Indicates that the given camera is no longer being used on the Dart side,
/// and any associated resources can be cleaned up.
@async
@ObjCSelector('disposeCamera:')
void dispose(int cameraId);
/// Locks the camera capture to the current device orientation.
@async
@ObjCSelector('lockCaptureOrientation:')
void lockCaptureOrientation(PlatformDeviceOrientation orientation);
/// Unlocks camera capture orientation, allowing it to automatically adapt to
/// device orientation.
@async
void unlockCaptureOrientation();
/// Takes a picture with the current settings, and returns the path to the
/// resulting file.
@async
String takePicture();
/// Does any preprocessing necessary before beginning to record video.
@async
void prepareForVideoRecording();
/// Begins recording video, optionally enabling streaming to Dart at the same
/// time.
@async
@ObjCSelector('startVideoRecordingWithStreaming:')
void startVideoRecording(bool enableStream);
/// Stops recording video, and results the path to the resulting file.
@async
String stopVideoRecording();
/// Pauses video recording.
@async
void pauseVideoRecording();
/// Resumes a previously paused video recording.
@async
void resumeVideoRecording();
/// Switches the camera to the given flash mode.
@async
@ObjCSelector('setFlashMode:')
void setFlashMode(PlatformFlashMode mode);
/// Switches the camera to the given exposure mode.
@async
@ObjCSelector('setExposureMode:')
void setExposureMode(PlatformExposureMode mode);
/// Anchors auto-exposure to the given point in (0,1) coordinate space.
///
/// A null value resets to the default exposure point.
@async
@ObjCSelector('setExposurePoint:')
void setExposurePoint(PlatformPoint? point);
/// Returns the minimum exposure offset supported by the camera.
@async
@ObjCSelector('getMinimumExposureOffset')
double getMinExposureOffset();
/// Returns the maximum exposure offset supported by the camera.
@async
@ObjCSelector('getMaximumExposureOffset')
double getMaxExposureOffset();
/// Sets the exposure offset manually to the given value.
@async
@ObjCSelector('setExposureOffset:')
void setExposureOffset(double offset);
/// Switches the camera to the given focus mode.
@async
@ObjCSelector('setFocusMode:')
void setFocusMode(PlatformFocusMode mode);
/// Anchors auto-focus to the given point in (0,1) coordinate space.
///
/// A null value resets to the default focus point.
@async
@ObjCSelector('setFocusPoint:')
void setFocusPoint(PlatformPoint? point);
/// Returns the minimum zoom level supported by the camera.
@async
@ObjCSelector('getMinimumZoomLevel')
double getMinZoomLevel();
/// Returns the maximum zoom level supported by the camera.
@async
@ObjCSelector('getMaximumZoomLevel')
double getMaxZoomLevel();
/// Sets the zoom factor.
@async
@ObjCSelector('setZoomLevel:')
void setZoomLevel(double zoom);
/// Sets the video stabilization mode.
@async
@ObjCSelector('setVideoStabilizationMode:')
void setVideoStabilizationMode(PlatformVideoStabilizationMode mode);
/// Gets if the given video stabilization mode is supported.
@async
@ObjCSelector('isVideoStabilizationModeSupported:')
bool isVideoStabilizationModeSupported(PlatformVideoStabilizationMode mode);
/// Pauses streaming of preview frames.
@async
void pausePreview();
/// Resumes a previously paused preview stream.
@async
void resumePreview();
/// Changes the camera used while recording video.
///
/// This should only be called while video recording is active.
@async
void updateDescriptionWhileRecording(String cameraName);
/// Sets the file format used for taking pictures.
@async
@ObjCSelector('setImageFileFormat:')
void setImageFileFormat(PlatformImageFileFormat format);
/// Sets the JPEG compression quality for still image capture.
@async
@ObjCSelector('setJpegImageQuality:')
void setJpegImageQuality(int quality);
}
@EventChannelApi()
abstract class CameraImageStreamEventApi {
PlatformCameraImageData imageDataStream();
}
/// Handler for native callbacks that are not tied to a specific camera ID.
@FlutterApi()
abstract class CameraGlobalEventApi {
/// Called when the device's physical orientation changes.
void deviceOrientationChanged(PlatformDeviceOrientation orientation);
}
/// Handler for native callbacks that are tied to a specific camera ID.
///
/// This is intended to be initialized with the camera ID as a suffix.
@FlutterApi()
abstract class CameraEventApi {
/// Called when the camera is inialitized for use.
@ObjCSelector('initializedWithState:')
void initialized(PlatformCameraState initialState);
/// Called when an error occurs in the camera.
///
/// This should be used for errors that occur outside of the context of
/// handling a specific HostApi call, such as during streaming.
@ObjCSelector('reportError:')
void error(String message);
}