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;
}
