Automatically close new VideoFrames created by toCanvasImageSource, reduce clones in mediaSamplesAtTimestamps

This commit is contained in:
Vanilagy
2025-05-09 15:31:18 +02:00
parent 8bca9b0217
commit 8de25036b8
5 changed files with 37 additions and 18 deletions
+7 -9
View File
@@ -461,7 +461,6 @@ export abstract class BaseMediaSampleSink<
// the consumer.
let outOfBandError = null as Error | null;
let lastUsedSample = null as MediaSample | null;
const pushToQueue = (sample: MediaSample | null) => {
sampleQueue.push(sample);
onQueueNotEmpty();
@@ -479,19 +478,20 @@ export abstract class BaseMediaSampleSink<
return;
}
let sampleUsed = false;
let sampleUses = 0;
while (
timestampsOfInterest.length > 0
&& sample.timestamp - timestampsOfInterest[0]! > -1e-10 // Give it a little epsilon
) {
pushToQueue(sample.clone() as MediaSample);
sampleUses++;
timestampsOfInterest.shift();
sampleUsed = true;
}
if (sampleUsed) {
lastUsedSample?.close();
lastUsedSample = sample;
if (sampleUses > 0) {
for (let i = 0; i < sampleUses; i++) {
// Clone the sample if we need to emit it multiple times
pushToQueue((i < sampleUses - 1 ? sample.clone() : sample) as MediaSample);
}
} else {
sample.close();
}
@@ -601,7 +601,6 @@ export abstract class BaseMediaSampleSink<
}
await flushDecoder();
lastUsedSample?.close();
}
decoder.close();
@@ -641,7 +640,6 @@ export abstract class BaseMediaSampleSink<
for (const sample of sampleQueue) {
sample?.close();
}
lastUsedSample?.close();
return { value: undefined, done: true };
},