Make samples disposable

This commit is contained in:
Vanilagy
2025-09-24 21:41:52 +02:00
parent fa4e064345
commit a043f410fd
4 changed files with 25 additions and 8 deletions
+15 -2
View File
@@ -16,8 +16,11 @@ import {
toUint8Array,
SetRequired,
isFirefox,
polyfillSymbolDispose,
} from './misc';
polyfillSymbolDispose();
/**
* Metadata used for VideoSample initialization.
* @group Samples
@@ -49,7 +52,7 @@ export type VideoSampleInit = {
* @group Samples
* @public
*/
export class VideoSample {
export class VideoSample implements Disposable {
/** @internal */
_data!: VideoFrame | OffscreenCanvas | Uint8Array | null;
/** @internal */
@@ -736,6 +739,11 @@ export class VideoSample {
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
(this.duration as number) = newDuration;
}
/** Calls `.close()`. */
[Symbol.dispose]() {
this.close();
}
}
const isVideoFrame = (x: unknown): x is VideoFrame => {
@@ -840,7 +848,7 @@ export type AudioSampleCopyToOptions = {
* @group Samples
* @public
*/
export class AudioSample {
export class AudioSample implements Disposable {
/** @internal */
_data: AudioData | Uint8Array;
/** @internal */
@@ -1276,6 +1284,11 @@ export class AudioSample {
(this.timestamp as number) = newTimestamp;
}
/** Calls `.close()`. */
[Symbol.dispose]() {
this.close();
}
/** @internal */
static* _fromAudioBuffer(audioBuffer: AudioBuffer, timestamp: number) {
if (!(audioBuffer instanceof AudioBuffer)) {