import { sesame } from './proto/api';
import { EaseKind } from './sesame-api-client';
import Long from 'long';
export declare function keyframe(timeUs: number | Long, value: sesame.v1.common.IPropValue, easingIn?: EaseKind, easingOut?: EaseKind): sesame.v1.compositor.IKeyFrame;
export type CompositorID = string;
export type ReplayID = string;
export type AudioMixerID = string;
export interface INodeConfig {
    compositorId: string;
    parentAddress: string;
    nodeType: sesame.v1.compositor.NodeType;
}
export interface IEncoderConfig {
    codecId?: sesame.v1.common.CodecId;
    preset: sesame.v1.outputs.EncoderPreset;
    bitrateKbps: number;
    keyframeInterval?: number;
}
export interface IRecorderOutputConfig {
    filename: string;
    sizeGb: number;
    groupId: string;
    type: sesame.v1.outputs.RecorderType;
}
export interface IOutputConfig {
    outputType: sesame.v1.outputs.OutputType;
    compositionId: string;
    audioMixIds: string[];
    encodedConfig?: IEncoderOutputConfig;
    decklinkConfig?: IDecklinkOutputConfig;
    recorderConfig?: IRecorderOutputConfig;
    moqConfig?: sesame.v1.outputs.IEncodedMoqOutputConfig;
    systemAudioConfig?: sesame.v1.outputs.ISystemAudioOutputConfig;
    useAsClock?: boolean;
}
export interface IEncoderOutputConfig {
    url: string;
    width: number;
    height: number;
    fps: number;
    encoderConfig: IEncoderConfig;
}
export interface IDecklinkOutputConfig {
    deviceIndex: number;
    videoFormat: sesame.v1.common.VideoFormat;
    keyAndFill: boolean;
}
export interface INDIOutputConfig {
    name: string;
}
export interface IAudioMixerChannel {
    id: string;
    sourceId: string;
    channelType: sesame.v1.audio.AudioMixerChannelType;
    sourceChannels: number[];
    plugins: sesame.v1.audio.IAudioPlugin[];
    level: number;
    pan: number;
}
export interface IAudioMixerConfig {
    channels: IAudioMixerChannel[];
    outputType: sesame.v1.audio.AudioMixerChannelType;
    order: number;
}
export interface ISourceConfig {
    sourceType: sesame.v1.sources.SourceType;
    url?: string;
    deinterlace?: sesame.v1.sources.DeinterlaceType;
    useAsClock?: boolean;
    audioChannels?: number;
    loop?: boolean;
    playState?: sesame.v1.sources.SourceTransportState;
    userId?: string;
    audioOnly: boolean;
    mipMap: boolean;
    decoderType?: sesame.v1.sources.DecoderType;
    decodeBufferFrames?: number;
    textureSize?: sesame.v1.sources.SourceTextureSize;
    moqConfig?: sesame.v1.sources.IMoqSourceConfig;
    rttConfig?: sesame.v1.sources.IRTTSourceConfig;
    decklinkConfig?: sesame.v1.sources.IDecklinkSourceConfig;
    videoProcessors?: sesame.v1.sources.IVideoProcessor[];
    fileConfig?: IFileSourceConfig;
    ndiConfig?: INDISourceConfig;
    srtConfig?: ISRTSourceConfig;
    rtmpConfig?: IRTMPSourceConfig;
    rtspConfig?: IRTSPSourceConfig;
    recorderConfig?: IRecorderSourceConfig;
}
export interface IFileSourceConfig {
    filename: string;
    loop?: boolean;
    audioRouting?: number[];
}
export interface IDecklinkSourceConfig {
    deviceIndex: number;
    audioRouting?: number[];
}
export interface INDISourceConfig {
    name: string;
    audioRouting?: number[];
}
export interface ISRTSourceConfig {
    url: string;
    latencyMs?: number;
    audioRouting?: number[];
}
export interface IRTMPSourceConfig {
    url: string;
    audioRouting?: number[];
}
export interface IRTSPSourceConfig {
    url: string;
    audioRouting?: number[];
}
export interface IRecorderSourceConfig {
    recorderId: string;
}
export interface ISourceTransportConfig {
    cmdType: sesame.v1.sources.SourceTransportCommandType;
    value: sesame.v1.common.IPropValue;
}
export interface ITransportCommand {
    type: 'play' | 'pause' | 'stop' | 'seek' | 'seek_usertime' | 'jog' | 'live' | 'set_recorder' | 'load_playlist' | 'eject_playlist' | 'load_clip' | 'set_metadata' | 'take' | 'pre_roll' | 'post_roll' | 'next_playlist_clip' | 'skip_next_playlist_clip' | 'transitions_disabled' | 'set_scrubbing';
    value?: number | string;
    transactionId?: number;
    user?: string;
    id?: string;
}
export interface IPlaylistClip {
    id: number;
    recorderId: string;
    transitionTime?: number;
    speed?: number;
    audioRouting?: number[];
    transitionType?: number;
    transitionFadeColor?: {
        x: number;
        y: number;
        z: number;
        w: number;
    };
    audioLevels?: number[];
    startTime?: number;
    endTime?: number;
}
export interface IPlaylist {
    id: string;
    duration: number;
    clips: IPlaylistClip[];
}
export interface ITransactionOptions {
    transactionId?: number;
    dependencies?: number[];
}
/**
 * CommandList helper class for building Sesame command sequences.
 *
 * Provides a fluent API for constructing command lists that can be sent to the Sesame server.
 *
 * @example
 * ```typescript
 * const cl = new CommandList();
 * cl.add_source('cam1', { sourceType: SourceType.ST_DECKLINK, decklinkConfig: { deviceIndex: 0 } });
 * cl.add_compositor('main', 1920, 1080, false);
 * await client.execute(cl);
 * ```
 */
export declare class CommandList {
    private cl;
    constructor();
    private add;
    applyTransaction(transaction: ITransactionOptions): void;
    getLength(): number;
    filterCreatedAndDestroyedSources(): void;
    get_command_list_msg(): sesame.v1.commands.CommandList;
    private buildSourceConfig;
    private buildOutputEncodedConfig;
    private buildOutputConfig;
    callback(event: string, data: string, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    add_compositor(id: string, width: number, height: number, multisample: boolean, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    remove_compositor(id: string, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    clear_compositor(id: string, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    add_source(id: string, cfg: ISourceConfig, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    remove_source(id: string, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    add_node(id: string, cfg: INodeConfig, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    remove_node(compositorId: string, address: string, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    set_property(propertyDomain: sesame.v1.common.IPropertyDomain, addr: string, prop: string, val: sesame.v1.common.IPropValue, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    add_load_playlist_command(sourceId: string, playlist: IPlaylist): sesame.v1.commands.CommandListItem;
    add_eject_playlist_command(sourceId: string): sesame.v1.commands.CommandListItem;
    add_transport_command(id: string, msg: ITransportCommand, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    update_source(id: string, cfg: ISourceConfig, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    update_source_metadata(id: string, metadata: sesame.v1.common.ITransportMetadata, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    update_source_transport(id: string, cfg: ISourceTransportConfig, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    add_output(id: string, cfg: IOutputConfig, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    update_output(id: string, cfg: IOutputConfig, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    remove_output(id: string, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    add_audio_mixer(id: string, cfg: IAudioMixerConfig, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    update_audio_mixer(id: string, cfg: IAudioMixerConfig, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    add_audio_mixer_channel(mixerId: string, cfg: IAudioMixerChannel, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    remove_audio_mixer(mixerId: string, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    remove_audio_mixer_channel(mixerId: string, channelId: string, timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
    animate_property(propertyDomain: sesame.v1.common.IPropertyDomain, addr: string, prop: string, before: sesame.v1.compositor.AnimationChannelEvaluationMode, after: sesame.v1.compositor.AnimationChannelEvaluationMode, keyframes: sesame.v1.compositor.IKeyFrame[], timeOffsetMs?: number): sesame.v1.commands.CommandListItem;
}
//# sourceMappingURL=command-list.d.ts.map