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 diff --git a/src/transformers/BackgroundTransformer.ts b/src/transformers/BackgroundTransformer.ts index 9e2576c..00b9ab3 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), ); } @@ -88,21 +88,24 @@ 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); - this.gl?.setBackgroundImage(imageData); + await new Promise((resolve, reject) => { + img.crossOrigin = 'Anonymous'; + img.onload = () => resolve(img); + img.onerror = (err) => reject(err); + img.src = path; + }); + const imageData = await createImageBitmap(img); + this.backgroundImageAndPath = { imageData, path }; + } + this.gl?.setBackgroundImage(this.backgroundImageAndPath.imageData); } async transform(frame: VideoFrame, controller: TransformStreamDefaultController) { @@ -200,7 +203,7 @@ export default class BackgroundProcessor extends VideoTransformer