/// <reference types="dom-webcodecs" />
import { type ContainerContext, ExtendedVideoFrame } from "./frame";
import { MFXTransformStream } from "./stream";
import { type GenericTrack, Track } from "./container/Track";
import type { MFXEncodedChunk } from "./types";
/**
 * @group Decode
 */
export interface MFXDecodableChunk<Sample = any> extends MFXEncodedChunk {
    context?: ContainerContext;
    track?: GenericTrack<Sample>;
    video?: MFXEncodedChunk["video"] & {
        config: VideoDecoderConfig;
    };
    audio?: MFXEncodedChunk["audio"] & {
        config: AudioDecoderConfig;
    };
}
/**
 * @group Decode
 * @note Forces a VideoFrame to be copied to Software (CPU)
 */
export declare const forceCopyFrame: (frame: VideoFrame, canvas?: OffscreenCanvas) => Promise<ExtendedVideoFrame>;
/**
 * @group Decode
 */
export interface DecodeOptions {
    trim?: {
        start?: number;
        end?: number;
    };
    frameRate?: number;
    forceDecodeToSoftware?: boolean;
}
/**
 * @group Decode
 */
export declare const decode: (input: ReadableStream<Uint8Array>, mimeType: string, opt?: DecodeOptions) => Promise<{
    video: Track<any>;
    audio: Track<any>;
    videoTracks: Track<any>[];
    audioTracks: Track<any>[];
}>;
/**
 * @group Decode
 */
export declare class MFXAudioDecoder extends MFXTransformStream<MFXDecodableChunk, AudioData> {
    config: AudioDecoderConfig;
    get identifier(): string;
    constructor(config?: Partial<AudioDecoderConfig>);
}
/**
 * @group Decode
 */
export declare class MFXVideoDecoder extends MFXTransformStream<MFXDecodableChunk, ExtendedVideoFrame> {
    config: VideoDecoderConfig & {
        forceDecodeToSoftware: boolean;
    };
    get identifier(): string;
    constructor(config?: Partial<VideoDecoderConfig>, { forceDecodeToSoftware, }?: {
        forceDecodeToSoftware?: boolean;
    });
}
