// WebCodecs // Specification: https://w3c.github.io/webcodecs/ // Repository: https://github.com/w3c/webcodecs // Big thanks to Ben Wagner (https://github.com/dogben) for the original type definitions! // I modified them to reflect changes in the spec and to better fit my usual structure. // https://github.com/dogben/TypeScript-WebCodecs-generator // https://github.com/dogben/DefinitelyTyped/blob/master/types/dom-webcodecs /// interface AudioDecoder { readonly state: CodecState; readonly decodeQueueSize: number; ondequeue: ((this: AudioDecoder, ev: Event) => any) | null; configure(config: AudioDecoderConfig): void; decode(chunk: EncodedAudioChunk): void; flush(): Promise; reset(): void; close(): void; addEventListener(type: K, listener: (this: AudioDecoder, ev: AudioDecoderEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: K, listener: (this: AudioDecoder, ev: AudioDecoderEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; } declare var AudioDecoder: { prototype: AudioDecoder; new(init: AudioDecoderInit): AudioDecoder; isConfigSupported(config: AudioDecoderConfig): Promise; } interface AudioDecoderEventMap { "ondequeue": Event; } interface AudioDecoderInit { output: AudioFrameOutputCallback; error: WebCodecsErrorCallback; } interface AudioFrameOutputCallback { (output: AudioData): void; } interface AudioEncoder { readonly state: CodecState; readonly encodeQueueSize: number; ondequeue: ((this: AudioEncoder, ev: Event) => any) | null; configure(config: AudioEncoderConfig): void; encode(frame: AudioData): void; flush(): Promise; reset(): void; close(): void; addEventListener(type: K, listener: (this: AudioEncoder, ev: AudioEncoderEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: K, listener: (this: AudioEncoder, ev: AudioEncoderEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; } declare var AudioEncoder: { prototype: AudioEncoder; new(init: AudioEncoderInit): AudioEncoder; isConfigSupported(config: AudioEncoderConfig): Promise; } interface AudioEncoderEventMap { "ondequeue": Event; } interface AudioEncoderInit { output: EncodedAudioChunkOutputCallback; error: WebCodecsErrorCallback; } interface EncodedAudioChunkOutputCallback { (output: EncodedAudioChunk, metadata?: EncodedAudioChunkMetadata): void; } interface EncodedAudioChunkMetadata { decoderConfig?: AudioDecoderConfig; } interface EncodedVideoChunkOutputCallback { (chunk: EncodedVideoChunk, metadata?: EncodedVideoChunkMetadata): void; } interface EncodedVideoChunkMetadata { decoderConfig?: VideoDecoderConfig; svc?: SvcOutputMetadata; alphaSideData?: BufferSource; } interface SvcOutputMetadata { temporalLayerId?: number; } interface AudioDecoderSupport { supported?: boolean; config?: AudioDecoderConfig; } interface AudioEncoderSupport { supported?: boolean; config?: AudioEncoderConfig; } interface AudioDecoderConfig { codec: string; sampleRate: number; numberOfChannels: number; description?: BufferSource; } interface AudioEncoderConfig { codec: string; sampleRate?: number; numberOfChannels?: number; bitrate?: number; } interface EncodedAudioChunk { readonly type: EncodedAudioChunkType; readonly timestamp: DOMHighResTimeStamp; readonly duration: number | null; readonly byteLength: number; copyTo(destination: BufferSource): void; } declare var EncodedAudioChunk: { prototype: EncodedAudioChunk; new(init: EncodedAudioChunkInit): EncodedAudioChunk; } interface EncodedAudioChunkInit { type: EncodedAudioChunkType; timestamp?: DOMHighResTimeStamp; duration?: number; data: BufferSource; } type EncodedAudioChunkType = ( | "key" | "delta" ); interface EncodedVideoChunk { readonly type: EncodedVideoChunkType; readonly timestamp: DOMHighResTimeStamp; readonly duration: number | null; readonly byteLength: number; copyTo(destination: BufferSource): void; } declare var EncodedVideoChunk: { prototype: EncodedVideoChunk; new(init: EncodedVideoChunkInit): EncodedVideoChunk; } interface EncodedVideoChunkInit { type: EncodedVideoChunkType; timestamp: number; duration?: number; data: BufferSource; } interface AudioData { readonly format: AudioSampleFormat | null; readonly sampleRate: number; readonly numberOfFrames: number; readonly numberOfChannels: number; readonly duration: number; readonly timestamp: DOMHighResTimeStamp; allocationSize(options: AudioDataCopyToOptions): number; copyTo(destination: BufferSource, options: AudioDataCopyToOptions): void; clone(): AudioData; close(): void; } declare var AudioData: { prototype: AudioData; new(init: AudioDataInit): AudioData; } interface AudioDataInit { format: AudioSampleFormat; sampleRate: number; numberOfFrames?: number; numberOfChannels?: number; timestamp?: DOMHighResTimeStamp; data: BufferSource; } interface AudioDataCopyToOptions { planeIndex: number; frameOffset?: number; frameCount?: number; format?: AudioSampleFormat; } type AudioSampleFormat = ( | "u8" | "s16" | "s32" | "f32" | "u8-planar" | "s16-planar" | "s32-planar" | "f32-planar" ); interface ImageDecoder { readonly type: string; readonly complete: boolean; readonly completed: Promise; readonly tracks: ImageTrackList; decode(options?: ImageDecodeOptions): Promise; reset(): void; close(): void; } declare var ImageDecoder: { prototype: ImageDecoder; new(init: ImageDecoderInit): ImageDecoder; isTypeSupported(type: string): Promise; } type ImageBufferSource = BufferSource | ReadableStream; interface ImageDecoderInit { type: string; data: ImageBufferSource; colorSpaceConversion?: ColorSpaceConversion; desiredWidth?: number; desiredHeight?: number; preferAnimation?: boolean; } interface ImageDecodeOptions { frameIndex?: number; completeFramesOnly?: boolean; } interface ImageDecodeResult { image: VideoFrame; complete: boolean; } interface ImageTrackList { [index: number]: ImageTrack; readonly ready: Promise; readonly length: number; readonly selectedIndex: number; readonly selectedTrack: ImageTrack | null; } declare var ImageTrackList: { prototype: ImageTrackList; } interface ImageTrack { readonly animated: boolean; readonly frameCount: number; readonly repetitionCount: number; selected: boolean; } declare var ImageTrack: { prototype: ImageTrack; }