mirror of
https://github.com/arcodange-org/mediabunny.git
synced 2026-10-02 21:33:52 +02:00
Fix onDequeue not being called upon adjustments to finalFrames
This commit is contained in:
@@ -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?.();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user