From 004bc8d5740ef60d386c06ecf2b211f3b4330f66 Mon Sep 17 00:00:00 2001 From: Ryan Gaus Date: Thu, 4 Sep 2025 13:28:24 -0400 Subject: [PATCH 1/3] feat: cache background image rather than refetch it every time it is enabled --- src/transformers/BackgroundTransformer.ts | 29 +++++++++++++---------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/transformers/BackgroundTransformer.ts b/src/transformers/BackgroundTransformer.ts index 9e2576c..ec48351 100644 --- a/src/transformers/BackgroundTransformer.ts +++ b/src/transformers/BackgroundTransformer.ts @@ -36,7 +36,7 @@ export default class BackgroundProcessor extends VideoTransformer + if (this.options?.imagePath) { + await this.loadAndSetBackground(this.options.imagePath).catch((err) => console.error('Error while loading processor background image: ', err), ); } @@ -92,16 +92,19 @@ export default class BackgroundProcessor extends VideoTransformer { - img.crossOrigin = 'Anonymous'; - img.onload = () => resolve(img); - img.onerror = (err) => reject(err); - img.src = path; - }); - const imageData = await createImageBitmap(img); + await new Promise((resolve, reject) => { + img.crossOrigin = 'Anonymous'; + img.onload = () => resolve(img); + img.onerror = (err) => reject(err); + img.src = path; + }); + this.backgroundImage = img; + } + const imageData = await createImageBitmap(this.backgroundImage); this.gl?.setBackgroundImage(imageData); } @@ -200,7 +203,7 @@ export default class BackgroundProcessor extends VideoTransformer Date: Thu, 4 Sep 2025 13:31:11 -0400 Subject: [PATCH 2/3] feat: store imagedata instead of raw image, since createImageBitmap is async / could slow down loading more --- src/transformers/BackgroundTransformer.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/transformers/BackgroundTransformer.ts b/src/transformers/BackgroundTransformer.ts index ec48351..00b9ab3 100644 --- a/src/transformers/BackgroundTransformer.ts +++ b/src/transformers/BackgroundTransformer.ts @@ -36,7 +36,7 @@ export default class BackgroundProcessor extends VideoTransformer { @@ -102,10 +102,10 @@ export default class BackgroundProcessor extends VideoTransformer reject(err); img.src = path; }); - this.backgroundImage = img; + const imageData = await createImageBitmap(img); + this.backgroundImageAndPath = { imageData, path }; } - const imageData = await createImageBitmap(this.backgroundImage); - this.gl?.setBackgroundImage(imageData); + this.gl?.setBackgroundImage(this.backgroundImageAndPath.imageData); } async transform(frame: VideoFrame, controller: TransformStreamDefaultController) { From e1399c32a880810eeabde277be4f876a9b757584 Mon Sep 17 00:00:00 2001 From: Ryan Gaus Date: Thu, 4 Sep 2025 13:37:12 -0400 Subject: [PATCH 3/3] docs(changeset): cache background image rather than refetch it every time it is enabled --- .changeset/legal-kings-fly.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/legal-kings-fly.md diff --git a/.changeset/legal-kings-fly.md b/.changeset/legal-kings-fly.md new file mode 100644 index 0000000..c547141 --- /dev/null +++ b/.changeset/legal-kings-fly.md @@ -0,0 +1,5 @@ +--- +'@livekit/track-processors': patch +--- + +cache background image rather than refetch it every time it is enabled