Fix onDequeue not being called upon adjustments to finalFrames

This commit is contained in:
Vanilagy
2026-08-21 15:14:04 +02:00
parent 3a41b8dddd
commit ab6d705ebd
+9
View File
@@ -463,6 +463,8 @@ export class VideoDecoderWrapper extends DecoderWrapper<VideoSample> {
const result: { frame: VideoFrame | null } = { frame: null }; const result: { frame: VideoFrame | null } = { frame: null };
this.finalFrames.push(result); this.finalFrames.push(result);
let finalFrameRemoved = false;
try { try {
if (!alpha) { if (!alpha) {
// Nothing needs to be merged // Nothing needs to be merged
@@ -477,14 +479,21 @@ export class VideoDecoderWrapper extends DecoderWrapper<VideoSample> {
// Emit any leading frames that are ready, preserving input order // Emit any leading frames that are ready, preserving input order
while (this.finalFrames.length > 0 && this.finalFrames[0]!.frame !== null) { while (this.finalFrames.length > 0 && this.finalFrames[0]!.frame !== null) {
const next = this.finalFrames.shift()!; const next = this.finalFrames.shift()!;
finalFrameRemoved = true;
this.frameHandler(next.frame!); this.frameHandler(next.frame!);
} }
} catch (error) { } catch (error) {
removeItem(this.finalFrames, result); removeItem(this.finalFrames, result);
finalFrameRemoved = true;
this.onError(error); this.onError(error);
} finally { } finally {
removeItem(this.mergeAlphaPromises, resolver.promise); removeItem(this.mergeAlphaPromises, resolver.promise);
resolver.resolve(); resolver.resolve();
if (finalFrameRemoved) {
// Since final frames affect the decode queue size
this.onDequeue?.();
}
} }
} }