import { DeviceType } from '..';
export type TriCasterMixEffectName = 'main' | `v${number}`;
export type TriCasterKeyerName = `dsk${number}`;
export type TriCasterInputName = `input${number}`;
export type TriCasterSourceName = TriCasterInputName | `ddr${number}` | `bfr${number}` | 'black';
export type TriCasterAudioChannelName = TriCasterSourceName | 'sound' | 'master';
export type TriCasterLayerName = 'a' | 'b' | 'c' | 'd';
export type TriCasterDelegateName = 'background' | TriCasterKeyerName;
export type TriCasterMixOutputName = `mix${number}`;
export type TriCasterMatrixOutputName = `out${number}`;
export type TriCasterMixOutputSource = TriCasterSourceName | TriCasterMixEffectName | 'program' | 'preview' | 'program_clean' | 'me_program' | 'me_preview';
export type TriCasterMatrixOutputSource = TriCasterSourceName | TriCasterMixOutputName;
export interface TriCasterOptions {
    host: string;
    port: number;
}
export declare enum TimelineContentTypeTriCaster {
    ME = "ME",
    DSK = "DSK",
    INPUT = "INPUT",
    AUDIO_CHANNEL = "AUDIO_CHANNEL",
    MIX_OUTPUT = "MIX_OUTPUT",
    MATRIX_OUTPUT = "MATRIX_OUTPUT"
}
export type TimelineContentTriCasterAny = TimelineContentTriCasterME | TimelineContentTriCasterDSK | TimelineContentTriCasterInput | TimelineContentTriCasterAudioChannel | TimelineContentTriCasterMixOutput | TimelineContentTriCasterMatrixOutput;
export interface TimelineContentTriCasterBase {
    deviceType: DeviceType.TRICASTER;
    type: TimelineContentTypeTriCaster;
    /**
     * Priority used to sort commands that are supposed to execute at the same time
     * Lower means faster execution (analaogous to other device integrations)
     * Default: 0
     */
    temporalPriority?: number;
}
interface TriCasterMixEffectBase {
    transitionEffect?: TriCasterTransitionEffect;
    keyers?: Record<TriCasterKeyerName, TriCasterKeyer>;
    /** Default: 'background' */
    delegates?: TriCasterDelegateName[];
}
export interface TriCasterMixEffectInMixMode extends TriCasterMixEffectBase {
    programInput?: string;
    /** Duration in seconds, applicable to effects other than 'cut' */
    transitionDuration?: number;
}
export interface TriCasterMixEffectWithPreview extends TriCasterMixEffectInMixMode {
    previewInput?: string;
    transitionEffect?: 'cut';
}
export interface TriCasterMixEffectInEffectMode extends TriCasterMixEffectBase {
    /** Use only in conjunction with effects that use M/E rows as layers (e.g. LiveSets) */
    layers?: Partial<Record<TriCasterLayerName, TriCasterLayer>>;
    transitionEffect?: number;
}
export type TriCasterMixEffect = TriCasterMixEffectInEffectMode | TriCasterMixEffectWithPreview | TriCasterMixEffectInMixMode;
export interface TimelineContentTriCasterME extends TimelineContentTriCasterBase {
    type: TimelineContentTypeTriCaster.ME;
    me: TriCasterMixEffect;
}
/**
 * Convenience object for the keyers in the Main M/E
 */
export interface TimelineContentTriCasterDSK extends TimelineContentTriCasterBase {
    type: TimelineContentTypeTriCaster.DSK;
    keyer: TriCasterKeyer;
}
export interface TriCasterInput {
    videoActAsAlpha?: boolean;
    videoSource?: string;
}
export interface TimelineContentTriCasterInput extends TimelineContentTriCasterBase {
    type: TimelineContentTypeTriCaster.INPUT;
    input: TriCasterInput;
}
export interface TriCasterAudioChannel {
    isMuted?: boolean;
    /**
     * Volume (dB)
     * Default: 0
     */
    volume?: number;
}
export interface TimelineContentTriCasterAudioChannel extends TimelineContentTriCasterBase {
    type: TimelineContentTypeTriCaster.AUDIO_CHANNEL;
    audioChannel: TriCasterAudioChannel;
}
export interface TimelineContentTriCasterMixOutput extends TimelineContentTriCasterBase {
    type: TimelineContentTypeTriCaster.MIX_OUTPUT;
    /**
     * Any of the named Inputs, Media Players and Buffers ('inputN', 'ddrN', 'bfrN') e.g. 'input12'
     * or any of the MEs ('vN') e.g. 'v1'
     * or 'program', 'preview', 'program_clean', 'me_program', 'me_preview'
     */
    source: TriCasterMixOutputSource;
    /**
     * Whether the clean version of the ME should be selected
     */
    meClean?: boolean;
}
/**
 * Output from the Internal Matrix Router (crosspoint)
 */
export interface TimelineContentTriCasterMatrixOutput extends TimelineContentTriCasterBase {
    type: TimelineContentTypeTriCaster.MATRIX_OUTPUT;
    /**
     * Any of the named Inputs, Media Players and Buffers ('inputN', 'ddrN', 'bfrN') e.g. 'input12'
     * or mix outputs ('mixN') e.g. 'mix2'
     */
    source: TriCasterMatrixOutputSource;
}
export type TriCasterTransitionEffect = 'cut' | 'fade' | number;
/**
 * Properties of a layer in effect mode (as opposed to transition mode)
 * Value ranges in this type adhere to the API and may differ from the GUI
 */
export interface TriCasterLayer {
    input?: string;
    /**
     * Enables position, scale, rotation, crop and feather, but it's weird,
     * so setting it to false while any of said properties are defined may
     * lead to unwanted behaviour
     */
    positioningAndCropEnabled?: boolean;
    position?: {
        /**
         * Horizontal translation
         * Default: 0.0 (center)
         * Frame width: 3.555... (-3.555 is fully off-screen to the left at scale=1.0)
         */
        x: number;
        /**
         * Vertical translation
         * Default: 0.0 (center)
         * Frame height: 2.0 (-2.0 is fully off-screen to the top at scale=1.0)
         */
        y: number;
    };
    scale?: {
        /**
         * Horizontal scale factor
         * Default: 1.0; Range: 0.0 to 5.0
         */
        x: number;
        /**
         * Vertical scale factor
         * Default: 1.0; Range: 0.0 to 5.0
         */
        y: number;
    };
    rotation?: {
        /**
         * X-axis rotation (degrees)
         * Default: 0.0; Range: -1440.0 to 1440.0
         */
        x: number;
        /**
         * Y-axis rotation (degrees)
         * Default: 0.0; Range: -1440.0 to 1440.0
         */
        y: number;
        /**
         * Z-axis rotation (perpendicular to screen plane) (degrees)
         * Default: 0.0; Range: -1440.0 to 1440.0
         */
        z: number;
    };
    crop?: {
        /**
         * Crop left (percentage)
         * Default: 0.0 (center); Range: 0.0 to 100.0
         */
        left: number;
        /**
         * Crop right (percentage)
         * Default: 0.0 (center); Range: 0.0 to 100.0
         */
        right: number;
        /**
         * Crop up (from the top, hence called "Bottom" in the UI) (percentage)
         * Default: 0.0 (center); Range: 0.0 to 100.0
         */
        up: number;
        /**
         * Crop down (from the top, hence called "Top" in the UI) (percentage)
         * Default: 0.0 (center); Range: 0.0 to 100.0
         */
        down: number;
    };
    /**
     * Border feather (percentage)
     * Default: 0.0; Range: 0.0 to 100.0
     */
    feather?: number;
}
/**
 * Properties of a keyer
 * Value ranges in this type adhere to the API and may differ from the GUI
 */
export interface TriCasterKeyer extends TriCasterLayer {
    onAir?: boolean;
    transitionEffect?: TriCasterTransitionEffect;
    /** Duration in seconds, applicable to effects other than 'cut' */
    transitionDuration?: number;
}
export {};
//# sourceMappingURL=tricaster.d.ts.map