UNPKG

frameflow

Version:

Audio/Video stream processing library for JavaScript world

111 lines (110 loc) 2.91 kB
/// <reference types="dom-webcodecs" /> import { InferredFormatInfo } from "./types/ffmpeg"; import { Flags } from "./types/flags"; import { ChunkData, FormatMetadata, GraphInstance, StreamMetadata, WriteChunkData } from "./types/graph"; declare type MessageType = keyof Messages; interface Messages { load: { send: { wasm: ArrayBuffer; }; reply: { wasm: ArrayBuffer; }; }; getMetadata: { send: { fileSize: number; }; reply: { container: FormatMetadata; streams: StreamMetadata[]; }; }; inferFormatInfo: { send: { format: string; url: string; }; reply: InferredFormatInfo; }; buildGraph: { send: { graphInstance: GraphInstance; flags: Flags; }; reply: void; }; nextFrame: { send: void; reply: { outputs: { [nodeId in string]?: WriteChunkData[]; }; endWriting: boolean; progress: number; }; }; deleteGraph: { send: void; reply: void; }; releaseWorkerBuffer: { send: { buffer: Uint8Array; }; reply: void; }; } declare type BackMessageType = keyof BackMessages; interface BackMessages { read: { send: undefined; reply: { inputs: ChunkData[]; }; }; seek: { send: { pos: number; }; reply: void; }; releaseMainBuffer: { send: { buffers: Uint8Array[]; }; reply: void; }; } interface AllMessages extends Messages, BackMessages { } declare type AllReplyCallback<T extends MessageType | BackMessageType> = (t: AllMessages[T]['send'], id: string, transferArr: TransferArray) => AllMessages[T]['reply'] | Promise<AllMessages[T]['reply']>; declare type TransferArray = (Transferable | VideoFrame | AudioData)[]; /** * only allow one access, others wait in promise */ export declare class Lock { #private; /** * * @returns unlock function */ start(): Promise<() => void>; } export declare class FFWorker { worker: Worker; lock: Lock; constructor(worker: Worker); send<T extends MessageType>(sendMsg: T, data: Messages[T]['send'], transferArray: TransferArray, id?: string): Promise<AllMessages[T]["reply"]>; reply<T extends BackMessageType>(msgType: T, callback: AllReplyCallback<T>, id: string): void; close(): void; } /** * */ export declare class WorkerHandlers { reply<T extends MessageType>(msgType: T, callback: AllReplyCallback<T>): void; send<T extends BackMessageType>(msgType: T, data: BackMessages[T]['send'], transferArray: TransferArray, id: string): Promise<AllMessages[T]["reply"]>; } export {};