import Subject from '../../rx/Subject';
import { VideoCodec } from '../decode/bitstream/codec/VideoCodec';
import { AudioCodec } from '../decode/bitstream/codec/AudioCodec';
import { IStreamTrackTransform } from '../transformation/StreamTrackTransform';
import { IEncodedStreamSink } from '../transformation/EncodedStreamSink';
import TransformMessageRouter from '../transformation/worker/MessageRouter';
export type StreamTransformContextOptions = {
    hasInsertableStreams: boolean;
    hasEncodedInsertableStreams: boolean;
    videoStreamTransformCallback: IStreamTrackTransform<VideoFrame> | undefined;
    audioStreamTransformCallback: IStreamTrackTransform<AudioData> | undefined;
    encodedVideoStreamSink: IEncodedStreamSink<RTCEncodedVideoFrame> | undefined;
    encodedAudioStreamSink: IEncodedStreamSink<RTCEncodedAudioFrame> | undefined;
};
export type StreamTransformContextTrack = {
    mediaStreamTrack: MediaStreamTrack | null;
    receiver: RTCRtpReceiver | null;
    mid: string | null;
    codec: VideoCodec | AudioCodec | null;
    transformPipelineWorker: Worker | null;
    transformMessageRouter: TransformMessageRouter | null;
    transformFunctionNames: string[];
};
export default class StreamTransformContext {
    readonly hasInsertableStreams: Subject<boolean>;
    readonly hasEncodedInsertableStreams: Subject<boolean>;
    readonly videoStreamTransformCallback: IStreamTrackTransform<VideoFrame> | undefined;
    readonly audioStreamTransformCallback: IStreamTrackTransform<AudioData> | undefined;
    readonly encodedVideoStreamSink: IEncodedStreamSink<RTCEncodedVideoFrame> | undefined;
    readonly encodedAudioStreamSink: IEncodedStreamSink<RTCEncodedAudioFrame> | undefined;
    readonly audioTrack: StreamTransformContextTrack;
    readonly videoTrack: StreamTransformContextTrack;
    constructor(options: StreamTransformContextOptions);
}
