import type { HybridObject } from 'react-native-nitro-modules'; import type { AutoFocusSystem } from '../common-types/AutoFocusSystem'; import type { TargetDynamicRange } from '../common-types/DynamicRange'; import type { PixelFormat } from '../common-types/PixelFormat'; import type { TargetStabilizationMode } from '../common-types/StabilizationMode'; /** * Session-level configuration for a {@linkcode CameraSession}. * * You can check if a specific {@linkcode CameraSessionConfig} is * supported via {@linkcode CameraDevice.isSessionConfigSupported | CameraDevice.isSessionConfigSupported(...)}. */ export interface CameraSessionConfig extends HybridObject<{ ios: 'swift'; android: 'kotlin'; }> { /** * Gets the currently selected FPS, or `undefined` if no specific * FPS value has been selected. */ readonly selectedFPS?: number; /** * Gets the currently selected {@linkcode TargetStabilizationMode} * for Video Streams (e.g. {@linkcode CameraVideoOutput}), or * `undefined` if no specific stabilization mode has been configured. */ readonly selectedVideoStabilizationMode?: TargetStabilizationMode; /** * Gets the currently selected {@linkcode TargetStabilizationMode} * for Preview Streams (e.g. {@linkcode CameraPreviewOutput}), or * `undefined` if no specific stabilization mode has been configured. */ readonly selectedPreviewStabilizationMode?: TargetStabilizationMode; /** * Gets the currently selected {@linkcode DynamicRange} * for Video Streams (e.g. {@linkcode CameraVideoOutput}), or * `undefined` if no specific dynamic range has been configured. */ readonly selectedVideoDynamicRange?: TargetDynamicRange; /** * Gets whether Photo HDR is enabled, or not. */ readonly isPhotoHDREnabled: boolean; /** * Gets the {@linkcode PixelFormat} this config is natively * streaming in. * * @discussion * If {@linkcode nativePixelFormat} is the same {@linkcode PixelFormat} * as the requested pixel format of your streaming output (e.g. * a {@linkcode CameraFrameOutput}), no conversion has to take place * to stream {@linkcode Frame}s, which provides better performance and * lower latency. * * If these pixel formats differ, pixel format conversions take place * causing higher latency which ultimately causes lower throughput * and higher battery usage. */ readonly nativePixelFormat: PixelFormat; /** * Get the {@linkcode AutoFocusSystem} used by this {@linkcode CameraSessionConfig}. */ readonly autoFocusSystem: AutoFocusSystem; /** * Gets whether this {@linkcode CameraSessionConfig} is streaming in a * binned format. * * @discussion * Pixel binning combines multiple neighboring sensor pixels into one larger effective pixel. * This usually improves low-light sensitivity and reduces noise, but can trade away fine detail * compared to a full-resolution non-binned readout. * Additionally, binned formats are more performant as they use significantly less bandwidth. */ readonly isBinned: boolean; }