export type MediaStreamFilter = (input: MediaStream) => MediaStreamFilterResult; export type MediaStreamFilterCleanup = () => void; export interface MediaStreamFilterResult { /** * Transformed media stream. If the filter is asynchronous, a promise which * resolves with a transformed media stream. */ output: MediaStream | Promise; /** * An optional cleanup callback. It is called when the filter is stopped, and * when it is unregistered. */ stop?: MediaStreamFilterCleanup; } export interface MediaStreamFilterEntry { start: MediaStreamFilter; /** * When the filter is running, it holds a cleanup callback returned when the filter * was started. */ stop: MediaStreamFilterCleanup | undefined; } export interface MediaStreamFilterRegistrationResult { /** * Promise that resolves when the filter is applied to the stream. */ registered: Promise; /** * Function that can be called to unregister the filter. */ unregister: () => Promise; }