import type { Constraint } from '../common-types/Constraint';
import type { CameraDevice } from '../inputs/CameraDevice.nitro';
import type { CameraOutputConfiguration } from './CameraOutputConfiguration';
import type { CameraSessionConfig } from './CameraSessionConfig.nitro';
/**
 * Specifies a single Camera input stream connection
 * streaming into zero or more outputs.
 */
export interface CameraSessionConnection {
    /**
     * The input device of this {@linkcode CameraSessionConnection}.
     * This {@linkcode CameraDevice} will stream into all given
     * {@linkcode outputs}.
     */
    input: CameraDevice;
    /**
     * All output configurations that the given {@linkcode input}
     * device will stream into.
     */
    outputs: CameraOutputConfiguration[];
    /**
     * Constraints specifically for this connection.
     */
    constraints: Constraint[];
    /**
     * Sets the initial {@linkcode CameraController.zoom | zoom}
     * value for the {@linkcode CameraController}.
     *
     * This value can later be adjusted
     * via {@linkcode CameraController.setZoom | CameraController.setZoom(...)}.
     */
    initialZoom?: number;
    /**
     * Sets the initial {@linkcode CameraController.exposureBias | exposureBias}
     * value for the {@linkcode CameraController}.
     *
     * This value can later be adjusted
     * via {@linkcode CameraController.setExposureBias | CameraController.setExposureBias(...)}.
     */
    initialExposureBias?: number;
    /**
     * A callback that will be called after the given {@linkcode constraints} have
     * been fully resolved, and a valid {@linkcode CameraSessionConfig} has been
     * constructed.
     *
     * This is equivalent to calling {@linkcode CameraFactory.resolveConstraints | CameraFactory.resolveConstraints(...)}
     * with the {@linkcode input}, {@linkcode outputs} and {@linkcode constraints} listed here.
     *
     * @discussion
     * The given {@linkcode config} can be used to provide visual feedback in
     * Camera apps where buttons have to be greyed out when they are not supported,
     * e.g. when passing a HDR {@linkcode Constraint} but the session didn't end up
     * selecting a {@linkcode CameraSessionConfig.selectedVideoDynamicRange}.
     */
    onSessionConfigSelected?: (config: CameraSessionConfig) => void;
}
